T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Unpinned Third-Party Dependencies and Dynamically Resolved Update Tool
- Content
View full analysis
Vulnerability Details
File Locations:
requirements.txt:1-4SKILL.md:95SKILL.md:100SKILL.md:313
Vulnerability Type: Supply-chain exposure through unpinned dependencies and dynamically resolved package execution
Risk Level: MediumVulnerable Code and Instructions
requirements.txt:1-4:text requests>=2.28.0 qrcode>=7.0 Pillow>=9.0.0 packaging>=21.0SKILL.md:95:text - If a new version is detected, the script only prompts the user to update manually through the controlled release process. It does not automatically execute an update command or remotely download and overwrite local files. The prompt provides the command `npx clawhub update vipshop-skills --force` for manual execution.SKILL.md:100:text 2. If the script reports a new version, the AI must instruct the user to update manually through the controlled release process and may relay the command `npx clawhub update vipshop-skills --force`; the latest version can be viewed at https://github.com/vipshop/vipshop-ai-skillsSKILL.md:313:bash pip install requests qrcode PillowTechnical Analysis
The Python dependencies use minimum-version constraints rather than exact, reviewed versions. The documented installation command is even less restrictive because it omits all version constraints and integrity hashes. A future installation can therefore resolve package versions that were not part of this audit.
The suggested
npx clawhub update vipshop-skills --forcecommand also omits an exact CLI version. Depending on the local environment and package-manager behavior,npxmay resolve and download a package dynamically before executing it. This makes the effective update tooling mutable after the Skill has been reviewed.This is a supply-chain weakness rather than evidence that the currently declared packages are malicious. No malicious dependency, typosqua ...[truncated 2171 chars]
- Remediation
View remediation
Remediation Suggestions
-
Pin every Python dependency to an exact, reviewed version instead of using lower bounds:
text requests==<reviewed-version> qrcode==<reviewed-version> Pillow==<reviewed-version> packaging==<reviewed-version> -
Generate and commit a lock file containing hashes for every direct and transitive dependency. Install with integrity enforcement, for example:
bash python -m pip install --require-hashes -r requirements.lock -
Change
SKILL.mdso its installation instructions reference the reviewed lock file rather than installing package names without versions. -
Pin the
clawhubCLI to a reviewed version and trusted registry source. Avoid allowingnpxto resolve an unspecified package version at execution time. -
Prefer a preinstalled and integrity-verified update tool. If dynamic installation is unavoidable, verify the package version, provenance, signature, and integrity before execution.
-
Run dependency updates through a controlled review process that includes vulnerability scanning, provenance verification, lock-file regeneration, tests, and a new security review before release.
-
Execute installation and update operations without administrator privileges and in an isolated environment, such as a dedicated virtual environment or sandbox, to reduce the impact of a compromised package.
-
