T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:1873
- Finding
- Unpinned Optional SDK Dependencies Permit Mutable Supply-Chain Code## Vulnerability Details **File Location**: `SKILL.md:1873-1882` **Vulnerability Type**: Unpinned third-party package installation **Risk Level**: Medium ### Vulnerable Code ```markdown **Python:** [github.com/SentiSenseApp/sentisense](https://github.com/SentiSenseApp/sentisense) (`pip install sentisense`) ```python import os from sentisense import SentiSenseClient client = SentiSenseClient(api_key=os.environ["SENTISENSE_API_KEY"]) price = client.get_stock_price("AAPL") ``` **Node.js:** [github.com/SentiSenseApp/sentisense-node](https://github.com/SentiSenseApp/sentisense-node) (`npm install sentisense`) ``` ### Technical Analysis The documented `pip install sentisense` and `npm install sentisense` commands do not specify an audited package version, integrity hash, lockfile, or immutable source revision. Consequently, the installed artifact is selected from mutable package-registry state at installation time. Although the Skill advises users to review the source and describes the SDKs as optional, reviewing the linked repository does not ensure that the package subsequently downloaded from PyPI or npm corresponds to the reviewed code. A compromised publisher account, registry compromise, or malicious future release could therefore cause a user to install code that was not present during the Skill audit. Python and Node.js dependencies may execute code during installation, import, or normal API use. Because the examples pass `SENTISENSE_API_KEY` to the installed SDK, a compromised dependency could also access and exfiltrate that credential. ### Attack Path 1. An attacker compromises the package publisher, registry account, release pipeline, or a future package version. 2. The attacker publishes a malicious release under the legitimate `sentisense` package name. 3. A user follows the Skill's unversioned `pip install sentisense` or `npm install sentisense` instruction. 4. The package manager resolves and downl ...[truncated 1157 chars]
- Remediation
- ## Remediation Suggestions 1. Pin each SDK to a specifically audited release, for example: - `pip install sentisense==X.Y.Z` - `npm install sentisense@X.Y.Z` 2. For Python, publish and verify package hashes through a requirements file using `--require-hashes`. 3. For Node.js, provide a committed lockfile and use `npm ci` rather than unconstrained installation. 4. Link each recommended package release to an immutable source commit and document how users can verify that the registry artifact was built from that commit. 5. Prefer isolated virtual environments or containers with minimal filesystem access, restricted environment variables, and limited outbound networking. 6. Preserve direct HTTPS REST calls as the default integration path because they avoid executing an additional third-party SDK. 7. Advise users not to expose unrelated credentials to the SDK process and to rotate `SENTISENSE_API_KEY` if dependency compromise is suspected.
