T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Unpinned Third-Party Dependency Creates Supply-Chain Exposure
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed local gold-investment analysis helper that uses Tushare data and scoped local files, with no evidence of hidden execution, exfiltration, or persistence.
Before installing, understand that this skill will use your Tushare token to query market data and may read project-local config or user-plan JSON files. Prefer a pinned or locked `tushare` install, avoid storing sensitive income or savings details in persistent user-memory files, and treat the output as an informational investment aid rather than guaranteed financial advice.
requirements.txt:1Unpinned Third-Party Dependency Creates Supply-Chain Exposure
The skill describes access to environment variables and local file read/write behavior, but it does not declare an explicit tool scope such as permissions or allowed-tools. That creates a least-privilege gap: an agent or reviewer cannot easily tell, ahead of execution, that the skill may access secrets like TUSHARE_TOKEN or read/write local paths such as memory/users/.json and references/history/. In a financial-planning context, this is more sensitive because the skill may touch user-specific financial configuration and local history files.
The natural-language content in this JSON template is entirely in Chinese, including the display name and user-facing notes. There is no indication that language choice is configurable or that the locale restriction is intentional and documented, which can violate language/locale policy requirements.
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.
data_dir = ensure_data_dir()
output_path = os.path.join(data_dir, f"{symbol.replace('.', '_')}.csv")
with open(output_path, "w", newline="", encoding="utf-8") as fh:
writer = csv.writer(fh)
writer.writerow(["trade_date", "close"])
for _, row in df.iterrows():
This Python file contains extensive user-facing natural-language strings in Chinese, including rationale, action guidance, summaries, and risk text, but there is no indication that the user can opt into this locale or select another language. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation applicable to all file types.
This JSON file contains multiple natural-language fields entirely in Chinese, including the display name and notes. Because SQP-3 applies to all file types and flags language policy issues when a skill forces a specific language without user opt-in, this appears to encode a fixed locale without documenting a user choice or region-specific requirement.
The dependency is specified without a version constraint, which makes builds non-reproducible and can allow unexpected or compromised upstream releases to be installed later. While this file alone does not prove exploitation, unpinned dependencies increase supply-chain risk and can introduce breaking or vulnerable versions without review.
tushare
This code initializes an API client with a credential from the environment and performs outbound requests to Tushare to retrieve market data. While failures are surfaced and the final file save is printed, there is no user-facing notice, comment, or docstring here explaining that the script will use the TUSHARE_TOKEN credential and contact an external service.