T08 · Insecure Dependencies
- Location
setup.sh:7- Finding
Automatic Installation of Unpinned Python Dependencies
- Content
View full analysis
Vulnerability Details
File Location:
setup.sh:7-9,requirements.txt:1-4, andSKILL.md:160-163
Vulnerability Type:T08: Insecure Dependencies
Risk Level: MediumVulnerable Code
setup.sh:7-9:bash # 1. Python packages echo "📦 Installing Python packages..." pip3 install --quiet python-pptx Pillow pdf2image pdfplumberrequirements.txt:1-4:text python-pptx Pillow pdf2image pdfplumberSKILL.md:160-163:bash pip3 install python-pptx Pillow pdf2image pdfplumberTechnical Analysis
The setup routine installs four third-party packages without exact version constraints or integrity hashes. Consequently, each setup execution resolves whatever package versions are available from pip's configured package index at that time.
This makes installations non-reproducible and leaves the effective dependency code outside the reviewed project subject to future upstream changes. If an upstream release or configured package index is compromised, package installation logic or imported runtime code can execute attacker-controlled instructions. The project metadata identifies
setup.shas the setup routine, making this installation behavior part of the expected skill deployment process.The package names are consistent with the modules used by the parser, and the audit found no evidence of typosquatting, dependency confusion involving a private package name, or a currently malicious release. The risk arises from automatically trusting mutable, unverified future releases.
Attack Path
- An attacker compromises the release process or account of one of the listed upstream packages, or controls a package index configured in the execution environment.
- The attacker publishes a malicious release under the expected package name.
- A user or automated agent runs
setup.shas directed by the skill metadata. pip3 installresolves the unpinned package to t ...[truncated 1236 chars]
- Remediation
View remediation
Remediation Suggestions
-
Pin every direct dependency to a reviewed exact version in
requirements.txt, for example:text python-pptx==REVIEWED_VERSION Pillow==REVIEWED_VERSION pdf2image==REVIEWED_VERSION pdfplumber==REVIEWED_VERSION -
Generate and verify cryptographic hashes for all direct and transitive dependencies. Use a fully resolved lock file and install it with:
bash python3 -m pip install --require-hashes -r requirements.txt -
Replace the duplicated package list in
setup.shwith installation from the locked requirements file:bash python3 -m pip install --require-hashes -r requirements.txt -
Update
SKILL.mdso that its manual installation instructions also use the same locked dependency file rather than installing mutable latest releases. -
Review dependency updates before changing pins, run vulnerability scanning against the resolved dependency graph, and regenerate hashes only after validating release provenance.
-
Run setup and document parsing as an unprivileged account in an isolated environment. Avoid running pip as root or combining Python dependency installation with unnecessary elevated privileges.
-
Configure pip to use an explicitly approved HTTPS package index and prevent untrusted environment configuration from silently redirecting dependency resolution to another index.
-
