T08 · Insecure Dependencies
- Location
SKILL.md:13- Finding
Unpinned Third-Party Dependencies Installed from a Mutable Package Index
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:13-17
Vulnerability Type: Unpinned dependency installation
Risk Level: MediumVulnerable Code
markdown > **Before first use**, run the following command in a terminal to install crawler dependencies: > > ```bash > pip install requests beautifulsoup4 lxml python-dateutil > ```Technical Analysis
The installation command retrieves the latest available versions of four packages without version constraints, integrity hashes, or a reviewed lock file. Consequently, the code installed and imported by the Skill can change after the Skill package itself has been audited.
No evidence was found that the named dependencies are currently malicious. The vulnerability is the absence of controls ensuring that future installations reproduce reviewed dependency versions. Package installation and module import can execute package-controlled Python code in the context of the user running the Skill.
Attack Path
- An attacker compromises a dependency publisher account, package release process, or package-index delivery path.
- The attacker publishes a malicious version under one of the dependency names.
- A user follows the mandatory setup instruction and runs the unpinned
pip installcommand. pipdownloads and installs the malicious release.- Malicious package code executes during installation or when
fetch_policy.pyimports the package.
Impact Assessment
The malicious package would run with the privileges of the user or service account executing
pipor the crawler. Depending on those privileges, it could read accessible local files, steal credentials, alter the Python environment, make outbound requests, or modify user-owned files.The project does not request administrative privileges, so privilege escalation is not inherent. The practical impact is bounded by the permissions of the account running the installation.
- Remediation
View remediation
Remediation Suggestions
- Define reviewed, exact versions in a requirements file:
text requests==REVIEWED_VERSION beautifulsoup4==REVIEWED_VERSION lxml==REVIEWED_VERSION python-dateutil==REVIEWED_VERSION - Generate and verify cryptographic hashes for every package and transitive dependency.
- Install with:
bash python -m pip install --require-hashes -r requirements.txt - Use a dedicated virtual environment with no unnecessary filesystem or credential access.
- Add automated dependency vulnerability and provenance scanning.
- Review and deliberately update the lock file rather than automatically accepting new releases.
- Define reviewed, exact versions in a requirements file:
