T08 · Insecure Dependencies
Warning
- Location
- skill.json:47
- Finding
- Unpinned Executable Dependencies Make Installation Non-Reproducible<![CDATA[ ## Vulnerability Details **File Location**: `skill.json:47`; supporting declarations in `README.md:48-52`, `SKILL.md:37-40`, `setup.py:9-11`, and `requirements.txt:1` **Vulnerability Type**: Unpinned third-party dependencies and use of a mutable `latest` package version **Risk Level**: Medium ### Vulnerable Code `skill.json:47`: ```json "install": "npx clawhub@latest install free-ride && cd ~/.openclaw/workspace/skills/free-ride && pip install -e ." ``` `README.md:48-52`: ```bash npx clawhub@latest install free-ride cd ~/.openclaw/workspace/skills/free-ride pip install -e . ``` `SKILL.md:37-40`: ```bash cd ~/.openclaw/workspace/skills/free-ride pip install -e . ``` `setup.py:9-11`: ```python install_requires=[ "requests>=2.31.0", ], ``` `requirements.txt:1`: ```text requests>=2.31.0 ``` ### Technical Analysis The documented installation process invokes `npx clawhub@latest`, which resolves and executes the release currently associated with the mutable `latest` tag. Consequently, the code executed during installation can change after this Skill version has been audited. The Python dependency specification also uses the open-ended constraint `requests>=2.31.0`. It permits any future compatible or incompatible release above the minimum version rather than limiting installation to a reviewed artifact. No lock file, exact version, or package hash is provided. These practices do not prove that the current dependencies are malicious. However, they create a supply-chain trust boundary in which future, unaudited package versions can be selected and executed or imported. Installation is therefore not reproducible from the audited project contents alone. ### Attack Path 1. An attacker compromises an upstream package publisher, registry account, distribution channel, or mutable release tag. 2. The attacker publishes a malicious future release that satisfies `clawhub@latest` or `requests>=2.31.0`. 3. A user follows the Skill's documented install ...[truncated 1330 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace the mutable npm version with an exact, reviewed version: ```bash npx clawhub@<exact-version> install free-ride ``` 2. Pin Python dependencies to exact reviewed versions in both dependency declarations: ```python install_requires=[ "requests==<reviewed-version>", ] ``` ```text requests==<reviewed-version> ``` 3. Generate and publish a lock file containing transitive dependency versions. 4. Use hash verification for Python packages, such as a hash-locked requirements file installed with: ```bash pip install --require-hashes -r requirements.txt ``` 5. Document the expected package registry and index URLs to reduce dependency-confusion and registry-substitution risks. 6. Use automated dependency review to test and approve version updates before changing pins. 7. Where practical, distribute signed or checksummed release artifacts and verify their integrity before installation. ]]>
