T08 · Insecure Dependencies
- Location
manifest.yaml:30- Finding
Unpinned Third-Party Dependencies Create a Supply-Chain Risk
- Content
View full analysis
Vulnerability Details
File Location:
manifest.yaml:30-33
Vulnerability Type: Unpinned third-party dependencies
Risk Level: MediumVulnerable Code
yaml dependencies: python: - perplexity>=1.0.0 - python-dotenv>=0.19.0Related installation instructions appear in
README.md:22andreference.md:521:bash pip install perplexity python-dotenvTechnical Analysis
The dependency declarations use unrestricted lower bounds, while the documented installation command specifies no versions or integrity hashes. Consequently, future installations may resolve to package versions that were not present during this audit.
Python packages can execute package-controlled code during installation, and their modules execute code when imported. This project imports both dependencies in
scripts/perplexity_client.py. A compromised upstream release, package-index compromise, or malicious transitive dependency could therefore execute arbitrary code in the Skill's environment.The audit found no evidence that the currently declared package names are intentionally malicious. The vulnerability is the mutable and unverifiable dependency resolution process.
Attack Path
- An attacker compromises a future release of
perplexity,python-dotenv, or one of their transitive dependencies, or compromises the package index used by the installer. - A user follows the documented command or installs the dependencies from
manifest.yaml. - The package manager resolves a malicious or otherwise unreviewed version because no exact version or hash is required.
- Malicious package code executes during installation or when
perplexity_client.pyimports the package. - That code runs with the privileges of the user or service operating the Skill and can access files, environment variables, and network resources available to that process.
Impact Assessment
Successful exploitation provides arbitrary code execution with the privileges o ...[truncated 412 chars]
- An attacker compromises a future release of
- Remediation
View remediation
Remediation Suggestions
-
Replace lower-bound dependency constraints with exact, reviewed versions.
-
Generate and commit a lock file that includes all transitive dependencies.
-
Record cryptographic hashes for every distributable package and install with hash verification, for example:
bash python -m pip install --require-hashes -r requirements.txt -
Update
README.mdandreference.mdto direct users to the locked, hash-verified dependency file rather than installing unconstrained package names. -
Explicitly configure and document the trusted Python package index.
-
Perform dependency vulnerability and provenance checks before updating locked versions.
-
Test dependency updates in an isolated environment before publishing them.
-
