T08 · Insecure Dependencies
- Location
scripts/requirements.txt:1- Finding
Unpinned Python Dependencies Permit Unreviewed Supply-Chain Changes
- Content
View full analysis
=2.28.0 requests-ratelimiter>=0.4.0 websocket-client>=1.6.0 ``` ### Technical Analysis All three dependencies use open-ended minimum-version constraints and lack package hashes. Each future installation may consequently resolve to a different dependency version than the one reviewed during this audit. If a dependency publisher account, package release, or transitive dependency is compromised, a malicious version satisfying these constraints could be installed automatically. The installed libraries execute in the same Python process as the Skill and therefore inherit its environment, filesystem access, and network access. In particular, this process can access `AVE_API_KEY`. This finding does not establish that any currently named package is malicious. The vulnerability is the absence of controls that guarantee reproducible, reviewed dependency resolution. ### Attack Path 1. An upstream package or one of its transitive dependencies publishes a compromised version that still satisfies the declared minimum constraint. 2. A user builds the Docker image or runs `pip install -r scripts/requirements.txt`. 3. `pip` resolves and installs the newer compromised package because no exact version or hash is enforced. 4. The malicious package executes when imported or used by the REST or WebSocket client. 5. It can read the Skill process's environment, including `AVE_API_KEY`, access files available to that process, and initiate network connections. ### Impact Assessment Successful exploitation grants code execution with the privileges of the user or container running the Skill. In a local installation, this can expose files and environment variables accessible to that user. In the provided container workflow, the immediate scope is generally limited to the container, but th ...[truncated 86 chars]- Remediation
View remediation
requests-ratelimiter== websocket-client== ``` 2. Generate a lock file containing all transitive dependencies. 3. Require package hashes during installation using a hash-locked requirements file and `pip install --require-hashes`. 4. Obtain packages only from a controlled package index or explicitly configured trusted index. 5. Use automated dependency scanning and update packages through reviewed pull requests. 6. Rebuild and test the Skill whenever a pinned dependency is updated. ]]>
