T08 · Insecure Dependencies
- Location
SKILL.md:44- Finding
Unpinned Third-Party Dependencies Create a Supply-Chain Risk
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:44,SKILL.md:140,SKILL.md:284,config.json:19,kujiale_upload.py:30,kujiale_upload.py:606-608, andkujiale_upload.py:653-656
Vulnerability Type: Unpinned third-party dependencies
Risk Level: MediumVulnerable Code Snippets
SKILL.md:44:bash pip install requests oss2config.json:19:json "dependencies": ["requests", "oss2"]kujiale_upload.py:606-608:python if not _HAS_REQUESTS: raise ImportError("'requests' not installed. Run: pip install requests") if not _HAS_OSS2: raise ImportError("'oss2' not installed. Run: pip install oss2")kujiale_upload.py:653-656:python if not _HAS_REQUESTS: print("ERROR: 'requests' not installed. Run: pip install requests", file=sys.stderr) return 1 if not _HAS_OSS2: print("ERROR: 'oss2' not installed. Run: pip install oss2", file=sys.stderr)Technical Analysis
The project instructs users to install
requestsandoss2without exact versions or package integrity hashes. Its metadata likewise declares only bare package names. Consequently, installation resolves whichever compatible release the configured Python package index serves at installation time.This makes builds non-reproducible and places implicit trust in future package releases and the selected package index. If a dependency release or package repository is compromised, malicious installation or runtime code could enter the environment without any change to this audited project.
The package names themselves appear legitimate; the issue is the absence of version and integrity controls, not evidence that the currently published packages are malicious.
Attack Path
- An attacker compromises a future release of one of the declared dependencies, its publisher account, or the package-resolution infrastructure.
- A user follows the documented `pip install request ...[truncated 982 chars]
- Remediation
View remediation
Remediation Suggestions
-
Create a reviewed dependency lock file containing exact versions, for example:
text requests==REVIEWED_VERSION oss2==REVIEWED_VERSION -
Generate and record cryptographic hashes for every direct and transitive dependency.
-
Install with hash enforcement:
bash python -m pip install --require-hashes -r requirements.txt -
Update
SKILL.md,config.json, and runtime error messages to reference the locked requirements file instead of recommending unconstrained installation. -
Use a controlled package index or internal mirror in production and CI environments.
-
Run dependency vulnerability and provenance checks during release preparation.
-
Review and update pinned versions on a controlled schedule rather than automatically resolving the latest releases.
-
