finance-news
33 findings (25 high, 6 medium, 2 low), mainly data exfiltration, policy violation, unauthorized tool use. Most recent scan 2026-02-06.
The finance-news skill is a sophisticated market briefing system with MEDIUM-HIGH security risk. Primary concerns include: (1) Hardcoded WhatsApp group JID exposing a specific communication channel, (2) Automatic transmission of portfolio data to external APIs without explicit user consent, (3) API key management relying on environment variables without security validation, (4) Command injection risks in subprocess calls with user-controlled data. The skill does NOT contain prompt injection, jailbreak attempts, or malicious code execution. However, the data exfiltration patterns and hardcoded credentials require remediation before public distribution. The skill is functional and well-structured but needs security hardening around secrets management and external API communication disclosure.
Scanner's overall assessment (LLM analyzer)
Second scanner: NVIDIA SkillSpector
Independent static run, no language model, over the same files as the Cisco scan above. How the two scanners compare across the whole corpus: Two scanners, one corpus.
What this skill does
Market news briefings with AI summaries. Use when asked about stock news, market updates, portfolio performance, morning/evening briefings, financial headlines, or price alerts. Supports US/Europe/Japan markets, WhatsApp delivery, and English/German output.
- Package
- 66 files, 2.2 MB
- SKILL.md
- 912 words, 12+ sections
- Code
- Python (23), Shell (6), JavaScript (1)
SKILL.md covers: Finance News Skill · First-Time Setup · Quick Start · Generate morning briefing · View market overview · Get news for your portfolio · Get news for specific stock · Features · 📊 Market Coverage · 📰 News Sources · 🤖 AI Summaries · 📅 Automated Briefings
Findings
HIGH Suspicious URL detected: https://example.com/1 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com/2 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com/aapl1 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com/aapl2 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com/msft1 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com/1 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com/2 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_research.py
HIGH Suspicious URL detected: https://example.com/feed.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/feed.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/top.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/markets.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/top.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/feed.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/feed.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/rss.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/rss.xml Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_fetch_news.py
HIGH Suspicious URL detected: https://example.com/1 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_summarize.py
HIGH Suspicious URL detected: https://example.com/2 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_summarize.py
HIGH Suspicious URL detected: https://example.com/3 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_summarize.py
HIGH Suspicious URL detected: https://example.com/1 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_summarize.py
HIGH Suspicious URL detected: https://example.com/2 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_summarize.py
HIGH Suspicious URL detected: https://example.com/3 Data Exfiltrationbehavioral
Script contains suspicious URL that may be used for data exfiltration
skills/clawhub-finance-news/tests/test_summarize.py
HIGH Hardcoded WhatsApp Group JID in Cron Scripts Data Exfiltrationllm
Multiple cron scripts contain a hardcoded WhatsApp group JID (120363421796203667@g.us) as the default value for FINANCE_NEWS_TARGET. This exposes a specific WhatsApp group identifier that could be targeted for spam, social engineering, or unauthorized message delivery if the skill is distributed publicly.
cron/evening.sh
export FINANCE_NEWS_TARGET="${FINANCE_NEWS_TARGET:-120363421796203667@g.us}"MEDIUM Reading environment variables that may contain secrets Data Exfiltrationstatic
Pattern detected: os.environ.get("FINNHUB_API_KEY
scripts/earnings.py:104
key = os.environ.get("FINNHUB_API_KEY", "")MEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic
Pattern detected: import urllib.request
scripts/summarize.py:19
import urllib.requestMEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic
Pattern detected: import urllib.request
scripts/fetch_news.py:18
import urllib.requestMEDIUM Undeclared network usage Unauthorized Tool Usestatic
Skill code uses network libraries but doesn't declare network requirement
MEDIUM API Keys Required from Environment Without Validation Data Exfiltrationllm
The skill requires multiple API keys (FMP_API_KEY, FINNHUB_API_KEY, GEMINI_API_KEY) loaded from environment variables or .env files, but there is no validation that these keys are properly secured. Users may inadvertently expose keys through shell history, process listings, or insecure .env file permissions.
scripts/earnings.py
def get_fmp_key() -> str:
key = os.environ.get("FMP_API_KEY", "")
if not key:
env_file = Path.home() / ".config" / "finance-news" / ".env"
if env_file.exists():
for line in env_file.read_text().splitlines():
if line.startswith("FMP_API_KEY="):
key = line.split("=", 1)[1].strip()MEDIUM Network Data Exfiltration to External APIs Without User Consent Data Exfiltrationllm
The skill automatically sends portfolio data, stock symbols, and market queries to multiple external APIs (FMP, Finnhub, Yahoo Finance, yfinance) without explicit user consent or disclosure in the manifest. This could expose sensitive investment information, especially when combined with user-specific portfolio holdings.
# fetch_news.py sends portfolio symbols to Yahoo Finance
quote = yf.Ticker(symbol)
data = quote.history(period='1d')
# earnings.py sends symbols to Finnhub API
url = f"https://finnhub.io/api/v1/calendar/earnings?from={from_date}&to={to_date}&token={api_key}"LOW Skill does not specify a license Policy Violationstatic
Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.
SKILL.md
LOW Missing allowed-tools Declaration Social Engineeringllm
The SKILL.md manifest does not declare the 'allowed-tools' field, making it unclear which agent tools (Read, Write, Bash, Python) are authorized for use. While this field is optional per the spec, its absence reduces transparency about the skill's intended tool usage.
SKILL.md
YAML Manifest Details:
- name: finance-news
- description: Market news briefings...
- license: Not specified
- compatibility: Not specified
- allowed-tools: Not specifiedWhat is in the package
66 files, 2.2 MB. Show the list.
| File | Kind | Size |
|---|---|---|
README.md | doc | 4.5 KB |
SKILL.md | doc | 7.3 KB |
pyproject.toml | config | 1.1 KB |
pytest.ini | config | 225 B |
requirements-test.txt | doc | 72 B |
requirements.txt | doc | 28 B |
config/config.json | config | 7.7 KB |
config/manual_earnings.json | config | 5.8 KB |
cron/alerts.sh | script | 677 B |
cron/earnings-weekly.sh | script | 676 B |
cron/earnings.sh | script | 656 B |
cron/evening.sh | script | 679 B |
cron/morning.sh | script | 678 B |
docs/EQUITY_SHEET_FIXES.md | doc | 4.8 KB |
docs/PREMIUM_SOURCES.md | doc | 6.2 KB |
htmlcov/class_index.html | data | 14 KB |
htmlcov/coverage_html_cb_dd2e7eb5.js | script | 25 KB |
htmlcov/function_index.html | data | 97 KB |
htmlcov/index.html | data | 9.0 KB |
htmlcov/status.json | config | 4.1 KB |
htmlcov/style_cb_9ff733b0.css | data | 16 KB |
htmlcov/z_de1a740d5dc98ffd_alerts_py.html | data | 145 KB |
htmlcov/z_de1a740d5dc98ffd_briefing_py.html | data | 52 KB |
htmlcov/z_de1a740d5dc98ffd_earnings_py.html | data | 177 KB |
htmlcov/z_de1a740d5dc98ffd_fetch_news_py.html | data | 326 KB |
htmlcov/z_de1a740d5dc98ffd_portfolio_py.html | data | 94 KB |
htmlcov/z_de1a740d5dc98ffd_ranking_py.html | data | 96 KB |
htmlcov/z_de1a740d5dc98ffd_research_py.html | data | 78 KB |
htmlcov/z_de1a740d5dc98ffd_setup_py.html | data | 89 KB |
htmlcov/z_de1a740d5dc98ffd_stocks_py.html | data | 103 KB |
htmlcov/z_de1a740d5dc98ffd_summarize_py.html | data | 513 KB |
htmlcov/z_de1a740d5dc98ffd_translate_portfolio_py.html | data | 49 KB |
htmlcov/z_de1a740d5dc98ffd_utils_py.html | data | 17 KB |
scripts/alerts.py | script | 16 KB |
scripts/briefing.py | script | 5.5 KB |
scripts/earnings.py | script | 20 KB |
scripts/fetch_news.py | script | 38 KB |
scripts/portfolio.py | script | 9.8 KB |
scripts/ranking.py | script | 11 KB |
scripts/research.py | script | 8.4 KB |
scripts/setup.py | script | 9.9 KB |
scripts/stocks.py | script | 11 KB |
scripts/summarize.py | script | 62 KB |
scripts/translate_portfolio.py | script | 5.3 KB |
scripts/utils.py | script | 1.4 KB |
scripts/venv-setup.sh | script | 3.4 KB |
tests/README.md | doc | 712 B |
tests/test_alerts.py | script | 4.0 KB |
tests/test_alerts_extended.py | script | 13 KB |
tests/test_briefing.py | script | 3.0 KB |
tests/test_earnings.py | script | 3.7 KB |
tests/test_fetch_news.py | script | 4.1 KB |
tests/test_portfolio.py | script | 2.6 KB |
tests/test_ranking.py | script | 2.8 KB |
tests/test_research.py | script | 13 KB |
tests/test_setup.py | script | 2.5 KB |
tests/test_stocks.py | script | 9.4 KB |
tests/test_summarize.py | script | 11 KB |
workflows/README.md | doc | 3.4 KB |
workflows/alerts-cron.yaml | config | 1.6 KB |
workflows/briefing-cron.yaml | config | 3.4 KB |
workflows/briefing.yaml | config | 3.7 KB |
workflows/earnings-cron.yaml | config | 1.5 KB |
workflows/earnings-weekly-cron.yaml | config | 1.5 KB |
tests/fixtures/sample_portfolio.csv | data | 127 B |
tests/fixtures/sample_rss.xml | config | 730 B |
External hosts referenced
coverage.readthedocs.io github.com search.cnbc.com feeds.content.dowjones.io feeds.finance.yahoo.com finnhub.io is.gd www.apache.org addons.mozilla.org chrome.google.com console.developers.google.com coverage.rtfd.io docs.google.com feeds.bloomberg.com feeds.cms.handelsblatt.com finance.yahoo.com news.google.com newsfeed.zeit.de raw.githubusercontent.com sheets.googleapis.com www.barrons.com www.cnbc.com www.finanzen.net www.ft.com www.tagesschau.de
Hostnames that appear in the skill's files. Referencing a host is not a finding; compare against the findings above and the skill's stated purpose.
Environment variables referenced
SKILL_DIR FINANCE_NEWS_CHANNEL VENV_DIR LIBSTDCXX_PATH GCC_LIB_DIR BASE_DIR LD_LIBRARY_PATH FINANCE_NEWS_LD_LIBRARY_PATH FINANCE_NEWS_SUMMARY_MODEL FINNHUB_API_KEY FMP_API_KEY TOKEN
Package contents recorded 2026-10-22. The scan above ran against the version current at scan time; the two can differ if the skill has since been updated.
What we checked
- Static analyzer. Pattern rules over SKILL.md and bundled files: known-bad commands, exfiltration URLs, secrets, obfuscation.
- Behavioral analyzer. Checks what the skill asks the agent to do against what its description claims it does.
- Llm analyzer. A language model reads the skill and reports intent-level issues the rules cannot express.
- Trigger analyzer. Looks for instructions that fire on conditions the user did not ask for.
- Meta analyzer. A second model pass that validates, deduplicates and re-scores the other analyzers' findings.
What we did not check
- Runtime behaviour. The skill was not executed; findings come from reading its files.
- Anything fetched at install or run time, including remote scripts, package dependencies, and URLs the skill tells the agent to open.
- Content the analyzers cannot read: images, binaries, and some non-English text.
- Known scanner bypass classes. See the methodology and limitations page.
Sources
- Repository: https://clawhub.ai/skills/finance-news
- Raw scan result: finance-news-briefings-scan.json
- Badge for your README:
 - Request a re-scan