Back to skill

Security audit

KarmaBank

Security checks for vulnerabilities and agentic risk

Overview

KarmaBank appears to be a purpose-aligned USDC testnet borrowing skill, but its financial wallet actions and install path need review before use.

Review this skill before installing. Use only sandbox/testnet credentials, audit or remove the local file: dependency, require a lockfile or pinned dependency versions, and confirm exactly what borrow, repay, and wallet creation commands do before allowing an agent to run them.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
package.json:38
Finding
Unaudited Local Dependency Outside the Project Boundary## Vulnerability Details **File Location**: `package.json:36-45`; installation is directed by `README.md:13-18`, `README.md:24-29`, and `SKILL.md:10-13` **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Medium The dependency configuration includes a package resolved from a sibling directory outside the audited project: ```json "dependencies": { "@circle-fin/developer-controlled-wallets": "^10.1.0", "@circle/openclaw-wallet-skill": "file:../skills/circle-wallet", "@types/uuid": "^10.0.0", "axios": "^1.13.4", "commander": "^14.0.3", "dotenv": "^17.2.3", "node-forge": "^1.3.3", "uuid": "^13.0.0" } ``` Users are instructed to install these dependencies: ```bash npm install npm run build ``` ### Technical Analysis The `file:../skills/circle-wallet` dependency crosses the audited artifact boundary and loads a package from the local environment. The referenced sibling package was not included in the supplied project, so its source code, package metadata, and npm lifecycle scripts could not be reviewed. During `npm install`, npm may execute lifecycle scripts declared by dependencies. If the sibling directory contains an attacker-controlled package, its installation scripts can execute with the privileges of the user running npm. The absence of a committed lockfile also means registry dependencies specified with caret ranges may resolve to different permitted versions over time, reducing build reproducibility and increasing supply-chain exposure. No evidence establishes that the referenced package or registry dependencies are currently malicious. The risk arises from trusting unaudited, environment-dependent dependency content during the documented installation procedure. ### Attack Path 1. An attacker gains the ability to create or modify `../skills/circle-wallet` relative to the KarmaBank package directory. 2. The attacker supplies a valid npm package at that location and ...[truncated 1206 chars]
Remediation
## Remediation Suggestions 1. Include the wallet dependency inside the reviewed repository or replace the relative `file:` dependency with a trusted, published package pinned to an exact version. 2. Audit the dependency's source code and all npm lifecycle scripts before installation. 3. Commit an npm lockfile containing exact dependency resolutions and integrity hashes, and use `npm ci` for reproducible installations. 4. Pin security-sensitive dependencies to reviewed versions instead of relying only on mutable caret ranges. 5. Run installation with lifecycle scripts disabled, such as `npm ci --ignore-scripts`, unless particular scripts are documented and required. 6. Perform dependency installation in a sandbox or least-privileged environment without production credentials. 7. Add automated dependency scanning, lockfile integrity verification, and controlled update review to the release process.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (17)

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The README instructs users to perform borrowing, repayment, and wallet-creation actions tied to USDC and external wallet infrastructure, but it provides no warning that these commands may trigger real financial transactions or create external accounts. In an agent-skill context, this omission is risky because operators may treat the commands as harmless local actions and authorize actions affecting funds, debt state, or third-party services without informed consent.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill advertises wallet creation and USDC borrowing actions, and while it mentions testnet in the overview, it does not consistently and prominently warn users which commands may trigger blockchain or financial side effects, whether funds are real or simulated, or what safeguards exist before wallet creation and borrowing. In agentic contexts, ambiguous financial-action documentation can cause unintended transactions, wallet provisioning, or unsafe automation assumptions by downstream users or agents.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/jest": "^30.0.0",
    "@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"license": "ISC",
  "devDependencies": {
    "@types/jest": "^30.0.0",
    "@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",
    "typescript": "^5.9.3"
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"devDependencies": {
    "@types/jest": "^30.0.0",
    "@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",
    "typescript": "^5.9.3"
  },
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"@types/jest": "^30.0.0",
    "@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",
    "typescript": "^5.9.3"
  },
  "dependencies": {
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",
    "typescript": "^5.9.3"
  },
  "dependencies": {
    "@circle-fin/developer-controlled-wallets": "^10.1.0",
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"typescript": "^5.9.3"
  },
  "dependencies": {
    "@circle-fin/developer-controlled-wallets": "^10.1.0",
    "@circle/openclaw-wallet-skill": "file:../skills/circle-wallet",
    "@types/uuid": "^10.0.0",
    "axios": "^1.13.4",
Confidence
71% confidence
Finding
This skill handles wallet and USDC-related functionality, so leaving a security-sensitive runtime dependency unpinned increases supply-chain risk. A future install could resolve to a different version with breaking security behavior or a compromised release, which is more concerning here than in a non-financial utility.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"dependencies": {
    "@circle-fin/developer-controlled-wallets": "^10.1.0",
    "@circle/openclaw-wallet-skill": "file:../skills/circle-wallet",
    "@types/uuid": "^10.0.0",
    "axios": "^1.13.4",
    "commander": "^14.0.3",
    "dotenv": "^17.2.3",
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"@circle-fin/developer-controlled-wallets": "^10.1.0",
    "@circle/openclaw-wallet-skill": "file:../skills/circle-wallet",
    "@types/uuid": "^10.0.0",
    "axios": "^1.13.4",
    "commander": "^14.0.3",
    "dotenv": "^17.2.3",
    "node-forge": "^1.3.3",
Confidence
87% confidence
Finding
Axios is a runtime network library and the static findings note multiple known advisories, but the manifest uses a range rather than an exact version. In a financial agent skill that may call external services, unresolved dependency drift can expose the application to SSRF, proxy bypass, or response-handling issues if an affected version is installed.

Unverifiable Dependency: axios has 16 known advisory(ies) (CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
89% confidence
Finding
The manifest does not pin axios, so it is impossible to verify whether the actually installed version avoids the listed advisories. Because axios is used for outbound network communication, an affected resolved version could enable issues such as SSRF-related bypasses or response tampering paths, which are more serious in a financial agent context.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"@circle/openclaw-wallet-skill": "file:../skills/circle-wallet",
    "@types/uuid": "^10.0.0",
    "axios": "^1.13.4",
    "commander": "^14.0.3",
    "dotenv": "^17.2.3",
    "node-forge": "^1.3.3",
    "uuid": "^13.0.0"
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"@types/uuid": "^10.0.0",
    "axios": "^1.13.4",
    "commander": "^14.0.3",
    "dotenv": "^17.2.3",
    "node-forge": "^1.3.3",
    "uuid": "^13.0.0"
  }
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"axios": "^1.13.4",
    "commander": "^14.0.3",
    "dotenv": "^17.2.3",
    "node-forge": "^1.3.3",
    "uuid": "^13.0.0"
  }
}
Confidence
86% confidence
Finding
node-forge is a cryptography-related runtime dependency and the scan notes multiple known advisories, while the manifest does not pin an exact version. In a wallet/credit skill, dependency ambiguity around cryptographic code materially increases the risk of signature verification, certificate validation, or parsing flaws reaching production.

Unverifiable Dependency: node-forge has 15 known advisory(ies) (CVE-2026-33896 (Forge has a basicConstraints bypass in its certificate chain verification (RFC 5); CVE-2022-24773 (Improper Verification of Cryptographic Signature in `node-forge`); CVE-2025-66031 (node-forge has ASN.1 Unbounded Recursion) +12 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding
The package uses node-forge without exact version pinning despite numerous published advisories. Since this is a crypto-adjacent library inside a wallet-related skill, inability to prove the resolved version is safe is a meaningful security weakness that could expose certificate, signature, or ASN.1 parsing attack surfaces.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"commander": "^14.0.3",
    "dotenv": "^17.2.3",
    "node-forge": "^1.3.3",
    "uuid": "^13.0.0"
  }
}
Confidence
62% confidence
Finding
uuid is a runtime dependency and the manifest allows version drift via a caret range. Although the direct risk is lower than for networking or cryptography libraries, financial workflows benefit from deterministic dependency resolution to avoid pulling in affected releases unexpectedly.

Unverifiable Dependency: uuid has 1 known advisory(ies) (CVE-2026-41907 (uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
74% confidence
Finding
The uuid dependency is not pinned, so the installed version could fall within an advisory-affected range and that cannot be verified from this manifest alone. The practical impact is lower than crypto or networking libraries, but uncertainty is still undesirable in a financial workflow that should be tightly controlled.

Static analysis

No suspicious patterns detected.