T08 · Insecure Dependencies
- Location
README.md:8- Finding
Mutable and Unpinned Installation Dependencies Create a Supply-Chain Risk
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent crypto marketplace integration, but it can use wallet private keys to spend real ETH and upload content to persistent external storage without enough scoping or warnings.
Review before installing. Use a low-value or test wallet, avoid exposing a funded private key to the agent process, require explicit approval for every transaction, and do not upload secrets, personal data, or proprietary content to IPFS/Pinata. Prefer pinned install commands and locked dependencies.
README.md:8Mutable and Unpinned Installation Dependencies Create a Supply-Chain Risk
The skill encourages ETH purchases and IPFS uploads but does not prominently warn that blockchain transactions are irreversible, spend real funds, and may incur gas/platform fees, nor that IPFS-pinned content may become effectively public and persistent. In a marketplace skill intended for autonomous agents, omission of these warnings materially raises the risk of financial loss and accidental disclosure of sensitive data.
The README instructs users to run npx clawhub@latest install knowbster, which fetches and executes the latest remote package code at install time rather than a vetted, pinned version. If the upstream package is compromised or a malicious update is published, users or agents could execute attacker-controlled code during installation.
The command npx skills add knowbster also relies on executing an unpinned package from the registry, creating supply-chain risk through namespace takeover, dependency compromise, or malicious future releases. In an agent ecosystem, this is especially risky because automated setup may run such commands non-interactively and at scale.
The Quick Start shows initializing the client directly with process.env.PRIVATE_KEY and immediately purchasing knowledge, but it does not warn that this credential controls blockchain funds or that the purchase may spend real ETH on Base L2 mainnet. In the context of a crypto-enabled skill for autonomous agents, this omission materially increases the chance of unsafe key handling, accidental live transactions, or users testing with funded wallets.
The skill demonstrates access to sensitive environment-backed capabilities such as PRIVATE_KEY and PINATA_JWT, but the manifest does not declare any explicit tool scope or permission boundaries. In an agent ecosystem, this weakens auditability and can allow the skill to be invoked without clear user understanding that wallet credentials and external network actions are involved.
The description uses broad trigger phrases like knowledge acquisition and specialized information, which could cause the skill to activate for many ordinary requests unrelated to cryptocurrency trading. Because this skill can lead to purchases and external data retrieval, overbroad invocation increases the chance of unintended wallet use or exposure to untrusted content.
The skill sends user-supplied knowledge content and metadata to an external third-party service (Pinata/IPFS), which is an actual external transmission of potentially sensitive or proprietary information. In this skill's context, the danger is heightened because the content is intended for decentralized storage, making disclosure broader and more durable than a normal API call.
const uploadToIPFS = async (content) => {
const response = await fetch('https://api.pinata.cloud/pinning/pinJSONToIPFS', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.PINATA_JWT}`,
The skill sends user-supplied knowledge content and metadata to an external third-party service (Pinata/IPFS), which is an actual external transmission of potentially sensitive or proprietary information. In this skill's context, the danger is heightened because the content is intended for decentralized storage, making disclosure broader and more durable than a normal API call.
const uploadToIPFS = async (content) => {
const response = await fetch('https://api.pinata.cloud/pinning/pinJSONToIPFS', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.PINATA_JWT}`,
The listing example passes the language value "en" directly, which imposes an English locale in the natural-language metadata flow. The document does not present this as optional user input or justify English as a required locale for a region-specific purpose.
The dependency on ethers uses a caret range (^6.9.0), which allows automatic installation of newer minor and patch releases rather than a single audited version. In a crypto-enabled agent skill, dependency drift can introduce breaking behavior or supply-chain risk if a later release contains a vulnerability or malicious compromise.
},
"homepage": "https://knowbster.com",
"dependencies": {
"ethers": "^6.9.0",
"axios": "^1.6.0"
}
}
The dependency on axios is not pinned and uses a caret range (^1.6.0), so builds may resolve to different releases over time. Because axios has a history of security advisories, leaving the version floating increases the chance of unexpectedly pulling a vulnerable or otherwise risky version into a network-facing skill.
"homepage": "https://knowbster.com",
"dependencies": {
"ethers": "^6.9.0",
"axios": "^1.6.0"
}
}
The manifest references axios without pinning an exact release, while the package has multiple known advisories affecting some versions. In a skill that interacts with external APIs and cryptocurrency-related services, an affected axios version could increase exposure to issues like SSRF, request manipulation, credential leakage, or man-in-the-middle style abuse depending on how the library is used elsewhere in the codebase.
Detected: suspicious.env_credential_access