T08 · Insecure Dependencies
- Location
package.json:30- Finding
Unpinned Python Dependencies and Cross-Ecosystem Dependency Declaration
- Content
View full analysis
Vulnerability Details
File Locations:
package.json:30-36SKILL.md:94-103README.md:68-74CLAUDE.md:31-35VERIFICATION_REPORT.md:102-105
Vulnerability Type: T08: Insecure Dependencies
Risk Level: MediumVulnerable Code
package.json:30-36json "dependencies": { "pdf2docx": ">=0.5.0", "python-docx": ">=0.8.10", "PyMuPDF": ">=1.19.0" }, "peerDependencies": { "openclaw": ">=1.0.0" }SKILL.md:94-103bash pip install pdf2docx python-docx PyMuPDFbash "C:/Users/CXX641/.workbuddy/binaries/python/versions/3.13.12/python.exe" -m pip install pdf2docx python-docxREADME.md:68-74bash pip install pdf2docx python-docx PyMuPDFCLAUDE.md:31-35bash pip install pdf2docx python-docx PyMuPDFVERIFICATION_REPORT.md:102-105markdown 1. First use requires dependency installation: `pip install pdf2docx python-docx PyMuPDF`Technical Analysis
The installation documentation directs users to install Python packages without exact version pins or cryptographic hashes. Consequently, dependency resolution selects the newest release satisfying the resolver at installation time rather than a fixed, reviewed artifact. A future compromised, malicious, or incompatible release could therefore become part of the effective Skill without any change to this repository.
The manifest also declares Python package names under the npm
dependenciesfield. npm and Python Package Index dependency namespaces are independent. A package installer that processespackage.jsonmay resolve same-named npm packages instead of the intended Python packages. This creates unnecessary exposure to dependency confusion, namespace substitution, or unintended packages from the wrong ecosystem.The broad minimum-version constraints further prevent reproducible installations:
json "pdf2docx": ">=0.5.0"Such constraints permit all future versions rather than limiting resolution to versions that were ...[truncated 2030 chars]
- Remediation
View remediation
Remediation Suggestions
- Remove Python libraries from npm dependency metadata:
json "dependencies": {}If no JavaScript runtime dependencies are required, omit the field entirely.
- Create a dedicated Python requirements file containing exact, reviewed versions:
text pdf2docx==0.5.13 python-docx==REVIEWED_VERSION PyMuPDF==REVIEWED_VERSION- Generate and record cryptographic hashes for every package and transitive dependency, then enforce them during installation:
bash python -m pip install --require-hashes -r requirements.txt-
Use a lock-generation tool such as
pip-compile, Poetry, or uv to pin the complete transitive dependency graph. Commit the resulting lock file to the repository. -
Configure installations to use an explicitly trusted package index. In enterprise deployments, prefer an internally controlled registry or package mirror containing reviewed artifacts.
-
Update every installation example in
SKILL.md,README.md,CLAUDE.md, andVERIFICATION_REPORT.mdto use the locked requirements file instead of installing unconstrained package names directly:
bash python -m pip install --require-hashes -r requirements.txt-
Install the dependencies in a dedicated virtual environment with only the filesystem permissions required to read the source PDF and write the destination DOCX.
-
Add automated dependency scanning and scheduled review of pinned versions. Version updates should be explicit repository changes that undergo testing and security review before release.
