T08 · Insecure Dependencies
- Location
scripts/cryptoprice.py:2- Finding
Unpinned Runtime Dependency Creates Supply-Chain Exposure
- Content
View full analysis
Vulnerability Details
File Location:
scripts/cryptoprice.py:2-7; invocation documented atSKILL.md:13-31
Vulnerability Type: Unpinned third-party dependency resolved at runtime
Risk Level: MediumVulnerable 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.pybash 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 BTCbash uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py --json uv run ~/.openclaw/skills/cryptoprice/scripts/cryptoprice.py BTC --jsonTechnical Analysis
The inline dependency declaration specifies only a lower bound for
requests. It therefore allowsuvto resolve and download future releases ofrequestsand 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
requestspackage 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
- An attacker compromises an allowed future release of
requests, one of its transitive dependencies, or a package source trusted by the localuvconfiguration. - The user invokes the Skill through a doc ...[truncated 1153 chars]
- An attacker compromises an allowed future release of
- Remediation
View remediation
Remediation Suggestions
- Pin
requestsand every transitive dependency to exact, reviewed versions instead of using a lower-bound-only constraint. - Generate and commit a lockfile containing the complete resolved dependency graph.
- Include cryptographic hashes for downloaded artifacts where supported, and require hash verification during installation.
- Run the Skill with locked or frozen dependency resolution so execution fails rather than silently selecting newer packages.
- Configure
uvto use an explicitly trusted package index and prevent unintended fallback to untrusted or user-controlled registries. - Review dependency updates before changing the lockfile, including package provenance, release metadata, and known vulnerability reports.
- Execute the Skill under a least-privileged account or sandbox with only the filesystem and network access required to query the Binance API.
- Pin
