T08 · Insecure Dependencies
- Location
runtime/hkipo-next/pyproject.toml:10- Finding
Unpinned and Unlocked Runtime Dependencies
- Content
View full analysis
Vulnerability Details
File Location:
runtime/hkipo-next/pyproject.toml:10-17
Vulnerability Type: Supply-chain exposure through mutable dependency resolution
Risk Level: MediumVulnerable Code
toml dependencies = [ "beautifulsoup4>=4.14.3", "httpx>=0.28.1", "lxml>=6.0.4", "opencc-python-reimplemented>=0.1.7", "pydantic>=2.13.0", "requests>=2.33.1", ]The documented execution path in
SKILL.md:20-24invokes the project throughuv:bash cd <skill_dir> uv run --directory runtime/hkipo-next hkipo-next ...Technical Analysis
The project does not include a
uv.lockfile, while every runtime dependency uses an open-ended minimum-version constraint. Consequently, a freshuv runmay resolve and install dependency versions that differ from those reviewed during this audit.This does not prove that any listed dependency is currently malicious. It creates a supply-chain vulnerability because the effective executable dependency set can change after the Skill has been published and audited. A compromised package release, maintainer account, package registry, dependency mirror, or resolver configuration could introduce code that executes with the privileges of the user invoking the Skill.
Attack Path
- An attacker compromises a permitted dependency release channel, package maintainer account, configured Python package index, or dependency mirror.
- The attacker publishes a malicious version satisfying one or more
>=constraints. - A user runs the documented
uv runcommand in an environment where dependencies are not already fixed and cached. uvresolves and downloads the attacker-controlled release because no reviewed lockfile or exact version constraint prevents selection.- Malicious code executes during package installation, import, or CLI startup under the invoking user's account.
Impact Assessment
Successful ...[truncated 503 chars]
- Remediation
View remediation
Remediation Suggestions
- Generate and commit a reviewed
uv.lockfile covering all direct and transitive dependencies. - Change documented runtime commands to use frozen resolution, such as
uv run --frozen, so execution fails rather than silently selecting unreviewed versions. - Pin direct dependencies to exact reviewed versions where operationally practical.
- Require cryptographic hashes or equivalent integrity verification for downloaded artifacts.
- Use a trusted, explicitly configured package index or an internally controlled mirror.
- Add automated dependency vulnerability, provenance, and unexpected-version checks to the release process.
- Regenerate and review the lockfile through a controlled update process rather than allowing dependency changes during ordinary Skill execution.
- Generate and commit a reviewed
