T09 · Insecure Skill Coding Practices
- Location
agents/technical_analyst.md:11- Finding
User-Controlled Ticker Interpolated into Shell Commands
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent stock-analysis workflow, but it unsafely places user-provided tickers into shell commands and output filenames, so it should be reviewed before use.
Before installing, treat this as a review-needed skill: run it only in a sandboxed workspace, use simple validated stock symbols, avoid passing untrusted ticker text, and prefer a version that validates tickers, avoids shell command strings, confines output paths, and ships a reviewed lockfile. Remember that its output is research assistance, not financial advice.
agents/technical_analyst.md:11User-Controlled Ticker Interpolated into Shell Commands
scripts/fetch_market_data.py:200Ticker-Derived Output Filenames Allow Path Traversal
pyproject.toml:7Unpinned and Unlocked Runtime Dependency Installation
The description presents a sophisticated trading-analysis orchestration skill built around multiple specialized Claude subagents that collaborate to produce trading recommendations. The actual code does not implement any agent orchestration, debate, analysis pipeline, or decision-making framework. It simply retrieves market and financial data for a ticker using yfinance, stores it in JSON, and prints a few summary fields. While fetching market data could be a supporting component of a trading-analysis system, this code chunk’s primary behavior is data collection/export, which is materially narrower and different from the declared purpose.
The declared description describes a broad multi-agent trading analysis framework modeled after TradingAgents, with many specialized subagents collaborating on investment decisions. The supplied code chunk does not do any orchestration or agent simulation. It is a standalone technical-analysis utility focused solely on computing price-based indicators for a ticker and saving them to JSON. While technical analysis is one component mentioned in the description, the actual code's primary purpose is far narrower and materially different from the declared system-level functionality. Therefore this is a clear description/behavior mismatch.
The skill instructs the agent to create report files and working artifacts, but it does not declare any explicit tool scope such as permissions or allowed-tools. In a multi-agent workflow that writes multiple outputs, missing tool boundaries increases the chance of unintended file writes or broader filesystem access than reviewers expect.
The activation criteria are very broad, causing the skill to trigger on a wide range of ordinary investment conversations. In context, this is risky because the skill launches a costly, multi-step workflow with subagents, external data retrieval, and file generation, potentially causing unnecessary tool use, excess token spend, and user confusion without clear intent.
The debate record format requires Chinese headings like "辩论背景", "第 N 轮辩论", and "研究经理总结" regardless of the user's requested language. Elsewhere the file also mixes Chinese-specific output examples, but this section is a direct formatting requirement and does not offer the user a language choice.
Lines L140-L147 require the report to include a section titled "数据来源" and provide citation examples entirely in Chinese. This imposes a specific language/locale convention on output without user opt-in or a stated regional justification, which matches the language-policy violation criteria.
The instructions require the final report to include a section titled 数据来源 and use Chinese-language citation examples, which imposes a specific language format. There is no opt-in, user choice, or documented regional justification for forcing this locale-specific output.
The file requires source attribution and source-section formatting using Chinese-language examples and headings such as "数据来源," and it prioritizes Chinese-language platforms as mandatory for certain stocks. This imposes a specific language/locale convention on the report without offering the user a language choice or documenting a justified locale restriction.
The skill hard-codes Chinese-language output/examples for parts of the report without any user opt-in, which can override user preferences and create instruction-conflict behavior in downstream agent outputs. In a trading-analysis skill, this is not directly code-execution or data-exfiltration dangerous, but it can degrade reliability, cause confusing mixed-language reports, and make the agent easier to steer away from the user's requested format.
This markdown skill instructs the agent to save output to {OUTPUT_DIR}/bear_case.md, which affects user data/filesystem state. The file does not include any warning or disclosure that it will write a file, nor any confirmation or caution about overwriting or creating output artifacts.
This markdown skill instructs saving a report to {OUTPUT_DIR}/bull_case.md, which is a file write operation. The description does not include any warning or disclosure that the skill will create or overwrite a file, so users may not realize it modifies the filesystem.
This markdown skill directs the agent to write a report to {OUTPUT_DIR}/news_analysis.md, which affects local user data. The description does not include any warning about file creation/overwrite behavior or its impact on the workspace.
Line L34 includes the Chinese term 拨备覆盖率 in otherwise English instructions. This can impose a language expectation without explicit user opt-in or explanation of why a multilingual term is required.
Line L57 directs the agent to save output to {OUTPUT_DIR}/risk_assessment.md, which is a file write operation. The markdown does not include any warning or disclosure that the skill will create or overwrite a file in the user's filesystem.
This markdown skill explicitly instructs the agent to save a report to {OUTPUT_DIR}/trading_recommendation.md, which is a file write operation. The description provides no warning or disclosure that the skill will create or overwrite a file on the user's system.
The package metadata says "Add your description here," which conflicts with the manifest's detailed claim that this skill orchestrates multi-agent stock analysis and trading recommendations. This is an intent/documentation mismatch because the embedded project description does not describe the actual stated purpose at all.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
The module docstring frames the script as computing technical indicators, while the implementation also creates an output directory and writes a JSON file to it. Because the documentation's usage text mentions an output path and says it outputs JSON, this is only a mild mismatch at the top-level description rather than a hidden capability.