T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Unpinned and Cross-Ecosystem Dependencies Create Supply-Chain Risk
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a straightforward A-share market data fetcher, with some dependency and documentation quality issues but no evidence of hidden, destructive, or credential-seeking behavior.
Install it only in an isolated environment and pin or lock the Python dependencies first. Expect it to contact Eastmoney and Sina Finance with requested stock symbols, and treat the yesterday limit-up and market-anomaly outputs cautiously until those endpoints are corrected.
requirements.txt:1Unpinned and Cross-Ecosystem Dependencies Create Supply-Chain Risk
The entire skill description and usage guidance are presented only in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to Chinese-speaking users. The policy calls for flagging language or locale constraints when they are imposed without opt-in or clear justification.
The natural-language description and user-facing strings in this file are exclusively Chinese, which can amount to forcing a specific language without user opt-in. There is no indication that the skill is intentionally limited to a Chinese-speaking or region-specific audience, nor any alternative language option.
The documentation at L249-L254 says this function retrieves yesterday's limit-up stocks, and the code even computes a yesterday value at L260. However, the request at L262 is the same generic current list endpoint used by get_limit_up_stocks and does not incorporate the yesterday date at all, so the implementation does not match the stated intent.
The comment and docstring at L288-L293 describe abnormal market movement data, which implies a distinct dataset. Instead, the code at L299 calls the same Eastmoney clist/get endpoint with the same stock-selection filter as get_limit_up_stocks, indicating it is not actually fetching anomaly-specific data.
The user-facing natural-language fields in this manifest are entirely in Chinese, including the top-level description and command descriptions, with no indication that the skill supports other languages or that the Chinese-only scope is an intentional, documented regional constraint. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation.
This Python skill makes network requests to third-party finance services via requests.get, but the code provides no clear user-facing warning that invoking the skill will contact external sites. Although some functions have internal comments and retry logs, those do not explicitly disclose outbound data transmission to the user at the point of use.
The package description is written only in Chinese ("云梦A股数据获取Skill"), which indicates a language-specific presentation without any visible opt-in, fallback, or justification in this file. The policy requires flagging language or locale constraints when the skill appears to force a specific language without user choice.
Using a caret range for pandas allows future minor and patch releases to be installed without review, which can introduce vulnerable or malicious upstream versions through the software supply chain. In a package manifest, this weakens build reproducibility and makes it harder to verify exactly what code will execute when the skill is installed.
"author": "OpenClaw",
"license": "MIT",
"dependencies": {
"pandas": "^2.0.0",
"requests": "^2.31.0",
"beautifulsoup4": "^4.12.0"
}
Using a caret range for requests permits automatic selection of newer releases that have not been explicitly vetted, creating a supply-chain risk if a compromised or vulnerable version is published. This is especially relevant for a data-fetching skill because requests is likely central to network operations.
"license": "MIT",
"dependencies": {
"pandas": "^2.0.0",
"requests": "^2.31.0",
"beautifulsoup4": "^4.12.0"
}
}
The manifest allows any compatible beautifulsoup4 release via a caret range, so installation may pull in an affected version if the upstream package is compromised or vulnerable. Because there is already a known advisory associated with beautifulsoup4 in this ecosystem, leaving the version unpinned materially increases uncertainty and risk.
"dependencies": {
"pandas": "^2.0.0",
"requests": "^2.31.0",
"beautifulsoup4": "^4.12.0"
}
}
The package references beautifulsoup4 without pinning, while static analysis reports a known advisory for that package in the npm ecosystem. Even if the exact installed version is unknown, this uncertainty is itself dangerous because consumers may resolve to a malicious or affected release at install time.
The dependency is unpinned, so installs may resolve to different versions over time, reducing build reproducibility and increasing supply-chain risk if a newly released or compromised version is fetched. In a security-sensitive skill, this can indirectly introduce vulnerable or malicious code without any manifest change.
pandas
requests
beautifulsoup4
Pandas has known advisories in some versions, and because the manifest does not specify a version, it is impossible to verify whether installation will land on a safe release. This does not prove an exploitable vulnerable version is present, but it is still a real security weakness because the dependency state is unverifiable and may resolve to an affected build.
The requests dependency is unpinned, allowing future installs to pull different releases, including ones with security regressions or newly introduced malicious packages in the supply chain. Because requests commonly handles outbound HTTP and may process credentials, version drift here is more security-relevant than for a purely local utility library.
pandas
requests
beautifulsoup4
Requests has multiple historical advisories, and the absence of version pinning means the environment may install an affected release without visibility or review. Given that requests is often used for network access, redirects, authentication, and TLS-sensitive workflows, uncertainty around its version is more dangerous in practice than a typical utility dependency.
The beautifulsoup4 dependency is unpinned, which creates non-reproducible environments and exposes the skill to supply-chain instability if future releases introduce vulnerabilities or breaking behavior. While not an immediate exploit by itself, it weakens dependency integrity and makes secure review harder.
pandas
requests
beautifulsoup4
The package description is written only in Chinese ("云梦A股数据获取Skill"), which indicates a fixed language presentation without any stated user choice or opt-in. The policy for this category flags language or locale constraints when they are imposed without offering an alternative or documenting a justified regional limitation.