T08 · Insecure Dependencies
- Location
package.json:17- Finding
Unpinned and Cross-Ecosystem Dependency Declarations
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a disclosed Chinese A-share stock-screening skill, but its install and market-data integrity risks deserve user caution.
Install only in an isolated environment, avoid npm install for this package, pin and review Python dependencies before running, and do not treat its stock output as verified financial advice. Be especially cautious because realtime quote data is fetched over plaintext HTTP and can be manipulated on untrusted networks.
package.json:17Unpinned and Cross-Ecosystem Dependency Declarations
yang_selection.py:128Financial Quote Data Retrieved over Plaintext HTTP
The entire README is written in Chinese and does not indicate that other languages are supported or that Chinese is a required, justified locale for this skill. Per the policy, language-specific behavior or presentation should either offer user opt-in/choice or clearly document a justified regional constraint.
The skill advertises and documents behavior that requires network access plus local file read/write, but it does not declare any explicit tool scope or permission boundaries. This creates unnecessary ambiguity about what the skill is allowed to access and increases the risk of over-privileged execution, especially since it reaches external finance APIs and persists cache data locally.
The natural-language content of the skill, including its name, description, and usage instructions, is presented only in Chinese. Under the policy, forcing a specific language without user opt-in is a language/locale policy violation unless the locale restriction is explicitly justified, which is not documented here.
The advanced filter expects realtime fields such as 'high' and 'volume', but the code passes reduced candidate objects containing only code, name, price, pctChg, turnover, and market_cap. This mismatch can cause runtime errors or incorrect screening results, which makes the skill unreliable and susceptible to denial-of-service through malformed or merely normal execution paths.
The dependency uses a caret version range, which allows newer releases within the major version to be installed. This weakens build reproducibility and can introduce vulnerable or malicious upstream changes through the supply chain without any change to this repository. In a skill that fetches live financial data, third-party packages are part of the trust boundary, so dependency drift is a real risk.
"author": "飞书助手",
"license": "MIT",
"dependencies": {
"baostock": "^1.0",
"pandas": "^2.0",
"numpy": "^1.0",
"requests": "^2.0"
Using an unpinned pandas version allows the installed package to vary over time, reducing reproducibility and increasing exposure to supply-chain compromise or newly introduced vulnerabilities. Because this skill appears to process external market data, compromise in a data-handling library could affect integrity or availability of results.
"license": "MIT",
"dependencies": {
"baostock": "^1.0",
"pandas": "^2.0",
"numpy": "^1.0",
"requests": "^2.0"
}
The numpy dependency is not pinned to a specific version, so future installs may resolve to different releases. That creates a supply-chain and stability risk, since vulnerable or incompatible transitive code can be introduced unexpectedly.
"dependencies": {
"baostock": "^1.0",
"pandas": "^2.0",
"numpy": "^1.0",
"requests": "^2.0"
}
}
The requests package is unpinned, allowing silent upgrades to newer releases within the permitted range. Since this skill likely performs network access to external financial services, a compromised or vulnerable HTTP client dependency could directly affect confidentiality, integrity, or availability of fetched data and outbound requests.
"baostock": "^1.0",
"pandas": "^2.0",
"numpy": "^1.0",
"requests": "^2.0"
}
}
This file contains user-facing natural-language descriptions, comments, and console output exclusively in Chinese, which effectively imposes a specific language on users. Under the language/locale policy, a skill should not force a language unless it offers user choice or clearly documents a justified locale constraint.