T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:9
- Finding
- Unbounded and Unverified Third-Party Dependencies## Vulnerability Details **File Location**: `SKILL.md`, lines 9-15 **Vulnerability Type**: Unpinned dependencies without integrity verification **Risk Level**: Medium ### Vulnerable Code ```yaml "requires": { "pip": ["akshare>=1.12", "pandas>=1.5"] }, "install": [ { "id": "pip-install", "kind": "pip", "packages": ["akshare>=1.12", "pandas>=1.5"], ``` The installation documentation in `references/README.md` also instructs users to install the latest available releases: ```bash pip install akshare pandas ``` ### Technical Analysis The skill specifies only minimum versions for `akshare` and `pandas`, with no exact version lock, upper bound, package hashes, or reviewed lock file. Consequently, the code installed during deployment can differ from the code that was present when the skill was audited. This does not demonstrate that either named package is currently malicious. However, it creates a supply-chain weakness: a compromised upstream account, malicious future release, compromised package index, or unexpected incompatible release could be selected automatically. Python packages may execute build logic during installation, and their module-level code executes when imported by `scripts/futures_data.py`. Because dependency integrity and provenance are not verified, review of this repository alone cannot establish the behavior of the effective runtime package set. ### Attack Path 1. An attacker compromises an upstream dependency release channel, maintainer account, or configured Python package index. 2. The attacker publishes a malicious version satisfying `akshare>=1.12` or `pandas>=1.5`. 3. A user or automated skill installer runs the declared installation operation without a lock file or hashes. 4. `pip` resolves and installs the attacker-controlled release. 5. Malicious code executes during package build or installation, or when `scr ...[truncated 808 chars]
- Remediation
- ## Remediation Suggestions 1. Replace minimum-only constraints with exact, reviewed versions, for example: ```text akshare==REVIEWED_VERSION pandas==REVIEWED_VERSION ``` 2. Generate and commit a lock file containing hashes, using a tool such as `pip-compile --generate-hashes`, Poetry, or an equivalent reproducible dependency manager. 3. Install with hash enforcement: ```bash pip install --require-hashes -r requirements.txt ``` 4. Pin transitive dependencies as well as direct dependencies so the complete environment is reproducible. 5. Use only a trusted package index and explicitly configure the index in controlled deployment environments. 6. Review and test dependency updates before changing locked versions; automate vulnerability and provenance scanning in CI. 7. Install and run the skill in an isolated virtual environment or container under a non-privileged account with minimal filesystem and network access. 8. Update `SKILL.md` and `references/README.md` so that installation examples use the same locked and hash-verified dependency set.
