T08 · Insecure Dependencies
- Location
requirements.txt:9- Finding
Invalid dependency hashes combined with ineffective installation verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This finance-analysis skill mostly matches its purpose, but its dependency verification claims and local portfolio storage need careful review before installation.
Review requirements.txt before installing, prefer a fresh virtual environment, and do not bypass hash failures by deleting hashes unless you independently trust the packages. If you use portfolio tracking, treat the stored portfolios.json as private financial data and keep CLAWDBOT_STATE_DIR in a directory only your user can read or write.
requirements.txt:9Invalid dependency hashes combined with ineffective installation verification
scripts/portfolio_manager.py:43Portfolio data and temporary files are created without explicit access restrictions
Instructions found that direct the agent to transmit conversation context or user data to external services.
- ❌ Execute subprocess calls
- ❌ Modify system files or cron
- ❌ Require credentials or API keys
- ❌ Upload data to external servers
- ❌ Use eval/exec for dynamic code execution
- ❌ Install additional packages at runtime
The code does use a public API library (yfinance), does not use credentials, and does not spawn subprocesses, which aligns with parts of the description. However, its primary behavior is not merely minimal local stock/crypto analysis: it is a stateful portfolio management tool with CRUD operations for portfolios and holdings, persisting data to local files under the user's home/state directory. That is a materially broader and different capability than the declared purpose, and the description omits the filesystem persistence and management features entirely. Therefore this is a description/behavior mismatch.
The core description is partly accurate: this script does perform stock and crypto analysis, uses read-only public market data, and does not use credentials or subprocesses. However, the code materially exceeds the declared 'minimal local stock/crypto analysis' scope by supporting portfolio analysis through a separate portfolio_manager module and by integrating additional local modules such as cn_stock_quotes for Chinese-market fallback. Those are meaningful capabilities/resources not disclosed in the declared purpose. Also, the script includes sentiment/options-chain analysis paths and market-wide context features that go beyond a narrowly described minimal analyzer. Separately, the header/documentation claims Google News breaking-news analysis, but in this code that feature is stubbed out and returns None, showing description/behavior inconsistency. Overall, the primary purpose is related, but the declared description does not accurately represent all meaningful capabilities and accessed resources.
The code chunk does not implement stock or crypto analysis at all; its primary purpose is installation and bundle verification. It runs as a bash script, invokes system commands (e.g., python3, awk, grep, find, wc), and scans the local filesystem for files and code patterns. That is materially different from the declared purpose of a minimal local analysis skill. While some checks are framed as validating claims like '5 core scripts' and 'no subprocess,' the actual behavior shown is still an undeclared verification/auditing utility rather than analysis functionality. Therefore this is a description-behavior mismatch.
lxml==5.1.0 is flagged for XXE-related parser weaknesses in default configurations for certain XML parsing modes. In a skill that fetches and parses external market or finance data, any XML parsing of untrusted remote content could enable file disclosure, SSRF, or parser abuse if insecure parser defaults are used.
soupsieve==2.5 has reported denial-of-service style issues such as memory exhaustion and regex/parser abuse on crafted selectors. As a transitive dependency of BeautifulSoup, risk depends on whether attacker-controlled selectors are ever processed, but retaining a known-vulnerable parser component can still expose the skill to resource exhaustion in edge cases.
idna==3.6 is flagged for denial-of-service and crafted-input handling issues in internationalized domain name processing. Because this skill uses HTTP libraries and may consume remote URLs or hostnames from public data sources, malformed IDN input could potentially trigger resolution or parsing weaknesses in upstream request flows.
urllib3==2.1.0 is a core transport dependency and the cited advisories include cross-origin header leakage and decompression/streaming issues. In a tool built around fetching stock/crypto data from public endpoints, a vulnerable HTTP transport layer is especially relevant because malformed responses, redirects, or proxy interactions could directly reach the affected code paths.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Referenced artifact was not completely inspected
| `stock_analyzer.py` | 99KB | 8-dimension stock/crypto analysis |
Referenced artifact was not completely inspected
| `stock_analyzer.py` | 99KB | 8-dimension stock/crypto analysis |
Referenced artifact was not completely inspected
| `stock_analyzer.py` | 99KB | 8-dimension stock/crypto analysis |
Referenced artifact was not completely inspected
| `stock_analyzer.py` | 99KB | 8-dimension stock/crypto analysis |
Referenced artifact was not completely inspected
| `stock_analyzer.py` | 99KB | 8-dimension stock/crypto analysis |
Referenced artifact was not completely inspected
| `stock_analyzer.py` | 99KB | 8-dimension stock/crypto analysis |
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
mkdir -p ~/.clawdbot/skills/research-analyst/
ls -la ~/.clawdbot/skills/research-analyst/
Code scans file system directories looking for sensitive files. This could be reconnaissance for credential theft.
mkdir -p ~/.clawdbot/skills/research-analyst/
ls -la ~/.clawdbot/skills/research-analyst/
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
- ❌ Download external code (all bundled)
- ❌ Execute subprocess calls
- ❌ Modify system files or cron
- ❌ Require credentials or API keys
- ❌ Upload data to external servers
- ❌ Use eval/exec for dynamic code execution
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
- ❌ Execute subprocess calls
- ❌ Modify system files or cron
- ❌ Require credentials or API keys
- ❌ Upload data to external servers
- ❌ Use eval/exec for dynamic code execution
- ❌ Install additional packages at runtime
Without declared permissions the skill's intent is opaque and cannot be validated.
The requirements pin requests==2.31.0, and the cited advisories include real security issues affecting URL handling, session verification behavior, and ancillary helper functionality. Even though this file is only a dependency manifest and the skill claims to use only public APIs, a network-facing research tool commonly performs outbound HTTP requests, so keeping a known-vulnerable HTTP client increases exposure to credential leakage, TLS verification edge cases, or other request-layer abuse if code paths trigger the affected behavior.
The code and comments indicate the skill is specifically tailored to A-share and Hong Kong Chinese market data, and line L010 hardcodes Chinese field labels in comments. Under the policy rule for natural-language locale violations, this reflects a fixed language/locale assumption without offering a user choice or documenting opt-in.
The skill manifest frames the capability as minimal analysis, while this file implements a full CRUD portfolio manager that stores and mutates user portfolio data on disk. Persistent portfolio tracking is a broader behavior than read-only local analysis and is not reflected in the manifest description.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
Portfolio management for research-analyst skill.
Usage:
python3 portfolio_manager.py create "Portfolio Name"
python3 portfolio_manager.py list
python3 portfolio_manager.py show [--portfolio NAME]
python3 portfolio_manager.py delete "Portfolio Name"
Detected: suspicious.dynamic_code_execution