T08 · Insecure Dependencies
Warning
- Location
- scripts/cryptoprice.py:2
- Finding
- Unpinned Runtime Dependency Creates Supply-Chain Exposure## Vulnerability Details **File Location**: `scripts/cryptoprice.py:2-7`; invocation documented at `SKILL.md:13-31` **Vulnerability Type**: Unpinned third-party dependency resolved at runtime **Risk Level**: Medium ### Vulnerable Code `scripts/cryptoprice.py:2-7`: ```python # /// script # requires-python = ">=3.10" # dependencies = [ # "requests>=2.28.0", # ] # /// ``` Relevant documented invocations in `SKILL.md:13-31`: ```bash uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py ``` ```bash uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py BTCUSDT uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py ETHUSDT uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py BTC ``` ```bash uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py --json uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py BTC --json ``` ### Technical Analysis The inline dependency declaration specifies only a lower bound for `requests`. It therefore allows `uv` to resolve and download future releases of `requests` and compatible versions of its transitive dependencies that were not part of this audit. Because the documented execution method is `uv run`, dependency resolution may occur when the Skill is invoked in an environment without an already locked and cached dependency set. The effective code executed by the Skill can consequently change over time without any modification to the audited repository. This is a supply-chain weakness rather than evidence that the currently available `requests` package or the Skill itself is malicious. Exploitation depends on compromise of an allowed package release, a configured package registry, dependency resolution infrastructure, or an equivalent package-source attack. ### Attack Path 1. An attacker compromises an allowed future release of `requests`, one of its transitive dependencies, or a package source trusted by the local `uv` configuration. 2. The user invokes the Skill through a doc ...[truncated 1153 chars]
- Remediation
- ## Remediation Suggestions 1. Pin `requests` and every transitive dependency to exact, reviewed versions instead of using a lower-bound-only constraint. 2. Generate and commit a lockfile containing the complete resolved dependency graph. 3. Include cryptographic hashes for downloaded artifacts where supported, and require hash verification during installation. 4. Run the Skill with locked or frozen dependency resolution so execution fails rather than silently selecting newer packages. 5. Configure `uv` to use an explicitly trusted package index and prevent unintended fallback to untrusted or user-controlled registries. 6. Review dependency updates before changing the lockfile, including package provenance, release metadata, and known vulnerability reports. 7. Execute the Skill under a least-privileged account or sandbox with only the filesystem and network access required to query the Binance API.
