T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:6
- Finding
- Unpinned Third-Party Packages and Global CLI Installation Create Supply-Chain Risk## Vulnerability Details **File Location**: `SKILL.md:6`, `SKILL.md:68-71`, and `SKILL.md:91-94` **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Medium ### Vulnerable Code `SKILL.md:6`: ```yaml metadata: {"openclaw": {"emoji": "🔐", "homepage": "https://keychains.dev", "requires": {"bins": ["keychains"]}, "install": [{"id": "npm", "kind": "node", "package": "keychains@latest", "global": true, "bins": ["keychains"], "label": "Install Keychains CLI (npm)"}]}} ``` `SKILL.md:68-71`: ```markdown For TypeScript/Node.js agents, `@keychains/machine-sdk` provides `keychainsFetch()` — a drop-in `fetch()` replacement with the same automatic registration and credential handling as the CLI. ``` npm install @keychains/machine-sdk ``` ``` `SKILL.md:91-94`: ```markdown | SDK | Install | Description | |-----|---------|-------------| | [Python SDK](https://pypi.org/project/keychains/) | `pip install keychains` | Drop-in `requests` replacement. `keychains.get()`, `keychains.post()`, `keychains.Session()`. | | [Client SDK](https://www.npmjs.com/package/@keychains/client-sdk) | `npm install @keychains/client-sdk` | TypeScript SDK for delegated environments (VMs, cloud functions). | ``` ### Technical Analysis The primary installation configuration resolves `keychains@latest`, while the documented Node.js and Python SDK installation commands omit versions entirely. These mutable dependency specifications allow the installed code to differ from the code that was reviewed. The primary CLI is also configured for global installation. If a malicious package version is resolved, its lifecycle scripts or runtime code may execute with the privileges of the user performing the installation. A global installation also increases exposure because the resulting executable remains available to unrelated sessions and projects. This is particularly sensitive because the installed components mediate authenticated API re ...[truncated 2004 chars]
- Remediation
- ## Remediation Suggestions 1. Replace `keychains@latest` with a reviewed, exact version such as `keychains@X.Y.Z`. 2. Pin exact versions for `@keychains/machine-sdk`, `@keychains/client-sdk`, and the Python `keychains` package. 3. Use lockfiles and registry-supported integrity hashes to ensure reproducible dependency resolution. 4. Avoid global installation where possible. Prefer a project-local dependency invoked through a controlled package script or an isolated environment. 5. Do not run package installation with administrator or root privileges. 6. Review package lifecycle scripts before installation and disable them where operationally feasible. 7. Verify package publisher identity, provenance attestations, signatures, and registry source. 8. Add automated dependency scanning and require manual security review before updating pinned versions. 9. Run the proxy client with restricted filesystem and network permissions, limiting outbound traffic to the documented proxy and approved API destinations. 10. Present the user with the destination, HTTP method, requested authorization scope, and consequential action before approval.
