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

Content
View full analysis

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
View 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
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 30)May include surrounding context.

json
"author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/jest": "^30.0.0",
    "@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 31)May include surrounding context.

json
"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"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 32)May include surrounding context.

json
"devDependencies": {
    "@types/jest": "^30.0.0",
    "@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",
    "typescript": "^5.9.3"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 33)May include surrounding context.

json
"@types/jest": "^30.0.0",
    "@types/node": "^25.2.0",
    "jest": "^30.2.0",
    "ts-jest": "^29.4.6",
    "typescript": "^5.9.3"
  },
  "dependencies": {

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 34)May include surrounding context.

json
"@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",

Unpinned Dependencies

Low
Category
Supply Chain
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.

Content

Scanner excerpt · package.json (reported line 37)May include surrounding context.

json
"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",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 39)May include surrounding context.

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",

Unpinned Dependencies

Low
Category
Supply Chain
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.

Content

Scanner excerpt · package.json (reported line 40)May include surrounding context.

json
"@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",

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.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 41)May include surrounding context.

json
"@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"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 42)May include surrounding context.

json
"@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"
  }

Unpinned Dependencies

Low
Category
Supply Chain
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.

Content

Scanner excerpt · package.json (reported line 43)May include surrounding context.

json
"axios": "^1.13.4",
    "commander": "^14.0.3",
    "dotenv": "^17.2.3",
    "node-forge": "^1.3.3",
    "uuid": "^13.0.0"
  }
}

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.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
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.

Content

Scanner excerpt · package.json (reported line 44)May include surrounding context.

json
"commander": "^14.0.3",
    "dotenv": "^17.2.3",
    "node-forge": "^1.3.3",
    "uuid": "^13.0.0"
  }
}

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.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.