T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Security-Critical Dependencies Are Not Reproducibly Pinned
- Content
View full analysis
=0.20.1 requests>=2.28 websockets>=12.0 ``` `clawhub.json:4-7`: ```json "requires": { "env": ["SIMMER_API_KEY"], "pip": ["simmer-sdk>=0.20.3", "requests>=2.28", "websockets>=12.0"] }, ``` ### Technical Analysis The project specifies only minimum dependency versions and does not impose upper bounds, exact versions, package hashes, or a lock file. Consequently, future installations may execute dependency releases that did not exist and were not reviewed when the Skill was audited. The minimum `simmer-sdk` version is also inconsistent: `requirements.txt` permits version `0.20.1`, while `clawhub.json` requires at least `0.20.3`. Installation behavior can therefore depend on which manifest the deployment environment uses. This is especially sensitive because `simmer_sdk` is responsible for authenticated network communication and transaction-related operations. The application passes `SIMMER_API_KEY` to `SimmerClient`, and the SDK controls dry-run generation, live order submission, wallet signing workflows, and deposit-wallet activation. Code executing inside a dependency inherits the Python process's access to environment variables and wallet-related resources. The audit did not find evidence that the currently intended SDK version is malicious. The issue is that the dependency policy permits an unreviewed or compromised future version to be installed automatically. ### Attack Path 1. An attacker compromises a future compatible release of `simmer-sdk`, one of its transitive dependencies, or the corresponding package distribution account. 2. The compromised release still satisfies the open-ended `>=` constraint. 3. A user or managed environment installs or upgrades the Skill witho ...[truncated 1365 chars]- Remediation
View remediation
websockets== ``` 2. Generate a reproducible lock file containing pinned transitive dependencies. 3. Require cryptographic package hashes during installation, such as through a hash-locked requirements file and `pip install --require-hashes`. 4. Reconcile the conflicting `simmer-sdk` minimum versions in `requirements.txt` and `clawhub.json`. 5. Review SDK release notes and security changes before updating the pinned version. 6. Use an internal package mirror or allowlist where appropriate. 7. Run wallet-enabled operations in a restricted environment with minimum filesystem access, network egress controls, and no unrelated credentials. 8. Remove `requests` or `websockets` as direct requirements if they are not directly required by this project and are already correctly declared as transitive SDK dependencies. ]]>
