T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:10
- Finding
- Mutable Third-Party Dependency Installed Without Integrity Verification<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 10-15 **Vulnerability Type**: Unpinned dependency and missing package integrity verification **Risk Level**: Medium ### Vulnerable Code ```yaml metadata: openclaw: emoji: "💱" requires: bins: ["python3"] install: - id: pip kind: pip packages: ["yfinance>=0.2.40"] ``` The mutable installation instruction is also repeated at `SKILL.md:181`: ```text Install yfinance: `pip install yfinance>=0.2.40` ``` ### Technical Analysis The dependency constraint `yfinance>=0.2.40` specifies only a minimum version. Consequently, installation may resolve to any newer package release available at the time the Skill is installed. The project does not include a lockfile, cryptographic package hashes, an exact audited version, or a verified vendored dependency. This creates a supply-chain risk because the code reviewed during this audit may not be the dependency code that executes in a future installation. If a later package release or its distribution channel is compromised, attacker-controlled code could execute during package installation or when `yfinance` is imported by `scripts/fetch_forex_news.py`. No evidence was found that the currently declared `yfinance` package is malicious. The vulnerability is the unsafe dependency-resolution policy and lack of integrity controls. ### Attack Path 1. An attacker compromises the dependency publisher account, package repository, release process, or another component of the dependency distribution chain. 2. The attacker publishes a malicious version of `yfinance` that satisfies `>=0.2.40`. 3. A user or Agent installs the Skill after the malicious release becomes available. 4. The package installer resolves the mutable requirement to the compromised version because no exact version or hash is enforced. 5. Malicious dependency code executes during installation, import, or normal use. 6. The code runs with the privileges ...[truncated 755 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace the lower-bound requirement with an exact, reviewed version, for example: ```yaml packages: ["yfinance==<audited-version>"] ``` 2. Generate and commit a dependency lockfile that includes all transitive dependencies. 3. Require cryptographic hashes for downloaded distributions, such as through a hash-pinned requirements file and `pip install --require-hashes`. 4. Restrict installation to the intended authenticated package index and disable unintended additional indexes to reduce dependency-confusion exposure. 5. Prefer reviewed wheel artifacts and verify package provenance where repository tooling supports it. 6. Run installation and execution in a least-privileged virtual environment or container without unnecessary credentials or host-file access. 7. Establish a controlled update process that reviews release notes and dependency changes, scans updated artifacts, and refreshes pins and hashes only after validation. 8. Update the troubleshooting command at `SKILL.md:181` so it uses the same exact version and integrity-controlled installation procedure. ]]>
