T08 · Insecure Dependencies
- Location
SKILL.md:6- Finding
Unpinned Third-Party Packages and Global CLI Installation Create Supply-Chain Risk
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:6,SKILL.md:68-71, andSKILL.md:91-94
Vulnerability Type: T08: Insecure Dependencies
Risk Level: MediumVulnerable 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
text 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
View remediation
Remediation Suggestions
- Replace
keychains@latestwith a reviewed, exact version such askeychains@X.Y.Z. - Pin exact versions for
@keychains/machine-sdk,@keychains/client-sdk, and the Pythonkeychainspackage. - Use lockfiles and registry-supported integrity hashes to ensure reproducible dependency resolution.
- Avoid global installation where possible. Prefer a project-local dependency invoked through a controlled package script or an isolated environment.
- Do not run package installation with administrator or root privileges.
- Review package lifecycle scripts before installation and disable them where operationally feasible.
- Verify package publisher identity, provenance attestations, signatures, and registry source.
- Add automated dependency scanning and require manual security review before updating pinned versions.
- Run the proxy client with restricted filesystem and network permissions, limiting outbound traffic to the documented proxy and approved API destinations.
- Present the user with the destination, HTTP method, requested authorization scope, and consequential action before approval.
- Replace
