Back to skill

Security audit

USD1 Transaction

Security checks for vulnerabilities and agentic risk

Overview

This skill openly performs Wormhole testnet token transfers, but it asks the agent to handle a raw wallet private key and can broadcast transfers without a clear confirmation or strong validation step.

Review this carefully before installing. Use only disposable testnet wallets and never pass a private key that controls real funds or is reused on mainnet. Require an explicit human confirmation flow, strict amount/address/chain validation, dependency updates, and preferably a wallet/signer integration instead of raw private-key input before treating this as safe for real transfers.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:6
Finding

Unsafe Floating-Point Conversion of Token Transfer Amount

Content
View full analysis

Vulnerability Details

File Location: index.js:6-14
Vulnerability Type: T09: Insecure Skill Coding Practices
Risk Level: Medium

js
const { amount: amt, toAddress, chain = 'Solana', privateKey } = input;

if (!amt || !toAddress || !privateKey) {
  return { status: 'failed', message: 'Missing required parameters: amount, toAddress, privateKey' };
}

try {
  const wh = await Wormhole('Testnet', [chain]);

  const transferAmount = BigInt(amt * 1_000_000); // USDC has 6 decimals

Technical Analysis

The transfer amount is multiplied using JavaScript's IEEE-754 Number arithmetic before it is converted to BigInt. Decimal token amounts cannot always be represented exactly as binary floating-point values. As a result:

  • amt * 1_000_000 may produce a non-integer, causing BigInt() to throw.
  • Large values may exceed Number.MAX_SAFE_INTEGER and lose precision before conversion.
  • The validation only checks whether amt is truthy. It does not ensure that the value is finite, positive, within an acceptable transfer limit, or expressed with no more than six decimal places.
  • Negative values and some numeric strings can pass the initial validation.
  • No explicit upper bound protects against accidental or maliciously induced oversized transfers.

Because this value controls a financial transaction, floating-point conversion and incomplete range validation can affect transaction integrity.

Attack Path

  1. A caller supplies a negative, excessively large, malformed, or precision-sensitive amount.
  2. The truthiness check accepts the value.
  3. JavaScript coerces and multiplies the value using floating-point arithmetic.
  4. The result either loses precision, becomes unsuitable for BigInt(), or represents an amount outside the intended policy.
  5. The Skill fails or passes the resulting integer to the Wormhole transfer operation.
  6. If the SDK and underlying chain accept the result, t ...[truncated 518 chars]
Remediation
View remediation

Remediation Suggestions

  • Require amount to be a decimal string rather than a JavaScript number.
  • Validate it against a strict positive-decimal format with no more than six fractional digits.
  • Reject signs, exponents, NaN, infinity, empty values, and unsupported types.
  • Define an explicit maximum transfer amount and require additional confirmation for high-value transfers.
  • Convert the validated decimal string without floating-point arithmetic. Split it into integer and fractional components, right-pad the fraction to six digits, and combine the components using BigInt.
  • Validate that the final base-unit amount is greater than zero and within protocol limits before constructing the transaction.
  • Add tests for fractional values, values near precision boundaries, negative inputs, excess decimal places, and oversized inputs.

T08 · Insecure Dependencies

Warning
Location
package-lock.json:1241
Finding

Excessive Dependency Surface Includes Deprecated Cryptographic Components

Content
View full analysis

Vulnerability Details

File Location: package.json:12-13; package-lock.json:197, package-lock.json:522, and package-lock.json:1241-1280
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Direct dependencies:

json
"dependencies": {
  "@wormhole-foundation/sdk": "^4.9.1",
  "@wormhole-foundation/sdk-base": "^4.9.1"
}

Umbrella SDK dependency entry:

json
"node_modules/@wormhole-foundation/sdk": {
  "version": "4.9.1",
  "resolved": "https://registry.npmjs.org/@wormhole-foundation/sdk/-/sdk-4.9.1.tgz",
  "integrity": "sha512-/5nv3ub7WGUzLJErwBk3kqjqWEA9htNiCaEmMwL9OZpYYlfZ/5B8L7AKaHWAmhyzmaL4kpyh5o69f+/DNlCqSQ==",
  "license": "Apache-2.0",
  "dependencies": {
    "@wormhole-foundation/sdk-algorand": "4.9.1",
    "@wormhole-foundation/sdk-algorand-core": "4.9.1",
    "@wormhole-foundation/sdk-algorand-tokenbridge": "4.9.1",
    "@wormhole-foundation/sdk-aptos": "4.9.1",
    "@wormhole-foundation/sdk-aptos-cctp": "4.9.1",
    "@wormhole-foundation/sdk-aptos-core": "4.9.1",
    "@wormhole-foundation/sdk-aptos-tokenbridge": "4.9.1",
    "@wormhole-foundation/sdk-base": "4.9.1",
    "@wormhole-foundation/sdk-connect": "4.9.1",
    "@wormhole-foundation/sdk-cosmwasm": "4.9.1",
    "@wormhole-foundation/sdk-cosmwasm-core": "4.9.1",
    "@wormhole-foundation/sdk-cosmwasm-ibc": "4.9.1",
    "@wormhole-foundation/sdk-cosmwasm-tokenbridge": "4.9.1",
    "@wormhole-foundation/sdk-definitions": "4.9.1",
    "@wormhole-foundation/sdk-evm": "4.9.1",
    "@wormhole-foundation/sdk-evm-cctp": "4.9.1",
    "@wormhole-foundation/sdk-evm-core": "4.9.1",
    "@wormhole-foundation/sdk-evm-portico": "4.9.1",
    "@wormhole-foundation/sdk-evm-tbtc": "4.9.1",
    "@wormhole-foundation/sdk-evm-tokenbridge": "4.9.1",
    "@wormhole-foundation/sdk-solana": "4.9.1",
    "@wormhole-foundation/sdk-solana-cctp": "4.9.1",
    "@wormhole-foundation/sdk-solana-core": "
...[truncated 3809 chars]
Remediation
View remediation

Remediation Suggestions

  • Replace the umbrella SDK with the smallest supported set of chain-specific Wormhole packages required for the declared Solana transfer operation.
  • Remove the redundant direct @wormhole-foundation/sdk-base dependency unless application code requires it independently.
  • Upgrade or restructure dependencies so deprecated @cosmjs/crypto versions and affected elliptic implementations are no longer present.
  • Pin reviewed production dependencies to exact versions and update them through a controlled dependency-review process.
  • Run software composition analysis and vulnerability scanning against the resolved lockfile in CI.
  • Review and restrict dependency lifecycle scripts. Use installation policies such as --ignore-scripts where compatible, or explicitly allow only reviewed native-build scripts.
  • Install and run the Skill in a sandbox with minimal filesystem, environment, and outbound-network access.
  • Avoid passing raw private-key strings through general application code. Prefer an isolated signer, hardware wallet, delegated signing service, or narrowly scoped wallet interface.
  • Add a supported-chain allowlist so caller input cannot cause unrelated chain adapters to be loaded.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill accepts a raw private key as input and directly uses it to authorize a token transfer. Handling private keys in plaintext inside a general-purpose skill is highly sensitive because it creates a path for secret exposure, misuse, logging leakage, or unauthorized fund movement. In this context, the skill is explicitly designed to move assets, so accepting raw signing material makes the risk substantially more dangerous.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code executes a blockchain token transfer immediately once parameters are provided, with no visible confirmation, simulation, or user acknowledgment step. Because blockchain transfers are typically irreversible, a mistaken address, amount, or chain selection can permanently move funds to the wrong destination. In an agent skill context, the absence of a confirmation barrier materially increases the risk of accidental or unauthorized asset movement.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==8.19.0 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency tree contains ws 8.19.0 with advisories for uninitialized memory disclosure and memory-exhaustion denial of service. Because this project pulls in multiple blockchain SDKs that commonly use WebSocket connections to remote RPC endpoints, the presence of a vulnerable WebSocket implementation is materially relevant and could expose clients or services to remote attacks.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.4 — 16 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

High
Category
Supply Chain
Confidence
96% confidence
Finding

Axios 1.13.4 is listed with multiple high-severity advisories, including SSRF/proxy bypass and prototype-pollution-related exploitation paths. In a cross-chain transfer skill that is likely to contact external RPC, bridge, or API endpoints, HTTP client flaws are especially relevant because they can affect request routing, credential handling, and trust boundaries.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: bigint-buffer==1.1.5 — 1 advisory(ies): CVE-2025-3194 (bigint-buffer Vulnerable to Buffer Overflow via toBigIntLE() Function)

High
Category
Supply Chain
Confidence
83% confidence
Finding

bigint-buffer 1.1.5 is present and flagged for a buffer overflow in toBigIntLE(). This appears to be a real vulnerable version, but practical exploitability depends on whether untrusted binary data can reach that conversion path; from the lockfile alone that is uncertain, so the impact is somewhat moderated despite the advisory severity.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==8.17.1 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
94% confidence
Finding

ws 8.17.1 is also present elsewhere in the dependency graph and carries the same memory disclosure and DoS advisories. Multiple vulnerable ws versions increase attack surface because different runtime paths may instantiate different copies, which is especially concerning in a network-heavy bridge/SDK environment.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
89% confidence
Finding

form-data 4.0.5 is present with a CRLF injection advisory affecting multipart field names and filenames. In applications that relay user-supplied metadata to external APIs, this can enable request smuggling or header/body manipulation; in a cross-chain integration project, such HTTP request integrity issues can be serious if external inputs are ever embedded into multipart submissions.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code performs a transfer of the token identified as 'USDC' but returns a success message stating that 'USD1' was transferred. This mismatch can mislead users about what asset moved, which is especially dangerous in financial software because users may approve or rely on incorrect transaction records. In a blockchain transfer skill, misleading asset labeling increases the chance of user confusion, accounting errors, and mistaken approvals.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @protobufjs/utf8==1.1.0 — 1 advisory(ies): CVE-2026-44288 (protobufjs has overlong UTF-8 decoding)

Low
Category
Supply Chain
Confidence
87% confidence
Finding

The lockfile includes @protobufjs/utf8 1.1.0, which is flagged for overlong UTF-8 decoding. Even though a lockfile is not executable code, it records that a vulnerable package version would be installed, so this is a real supply-chain exposure. In this project context, it is lower risk because there is no direct evidence in this file of attacker-controlled protobuf/UTF-8 parsing in a security-sensitive path.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: bn.js==5.2.2 — 1 advisory(ies): CVE-2026-2739 (bn.js affected by an infinite loop)

Low
Category
Supply Chain
Confidence
82% confidence
Finding

bn.js 5.2.2 is included and has an advisory for an infinite-loop condition. This is a real dependency risk, but it is typically exploitable as denial of service only when attacker-controlled large or malformed numeric inputs are processed, which is not demonstrated in the lockfile itself.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: elliptic==6.6.1 — 1 advisory(ies): CVE-2025-14505 (Elliptic Uses a Cryptographic Primitive with a Risky Implementation)

Low
Category
Supply Chain
Confidence
84% confidence
Finding

elliptic 6.6.1 is present, and even the package metadata in this lockfile warns that older CosmJS crypto usage contains security-relevant issues. In a blockchain transfer project, cryptographic weaknesses matter more than in a generic app, but this finding still depends on whether the affected primitive/path is actually used for sensitive key operations in runtime.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: bn.js==4.12.2 — 1 advisory(ies): CVE-2026-2739 (bn.js affected by an infinite loop)

Low
Category
Supply Chain
Confidence
80% confidence
Finding

bn.js 4.12.2 is another vulnerable version in the tree with the same infinite-loop advisory. This is a true supply-chain issue, though likely lower practical risk unless untrusted numeric input can drive the specific legacy dependency path into excessive processing.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: follow-redirects==1.15.11 — 1 advisory(ies): CVE-2026-40895 (follow-redirects leaks Custom Authentication Headers to Cross-Domain Redirect Ta)

Low
Category
Supply Chain
Confidence
86% confidence
Finding

follow-redirects 1.15.11 is present with an advisory about leaking custom authentication headers across cross-domain redirects. Since axios depends on this package and this project likely talks to external services, the issue is relevant, though impact depends on whether authenticated requests follow attacker-influenced redirects.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
92% confidence
Finding

The dependency uses a caret range (^4.9.1), which allows future minor and patch releases to be installed. This can introduce supply-chain risk because builds are not fully reproducible and a compromised or breaking upstream release could be pulled in without explicit review. In a blockchain transfer skill, dependency integrity matters more because library behavior directly affects transaction construction and signing workflows.

Content

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

json
"license": "ISC",
  "type": "commonjs",
  "dependencies": {
    "@wormhole-foundation/sdk": "^4.9.1",
    "@wormhole-foundation/sdk-base": "^4.9.1"
  }
}

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
92% confidence
Finding

The dependency uses a caret range (^4.9.1), which permits automatic installation of newer minor and patch versions. That increases supply-chain exposure and reduces reproducibility, which is especially relevant for a skill that appears to handle Wormhole-related token transfer functionality where dependency changes could affect asset movement or validation logic.

Content

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

json
"type": "commonjs",
  "dependencies": {
    "@wormhole-foundation/sdk": "^4.9.1",
    "@wormhole-foundation/sdk-base": "^4.9.1"
  }
}

Static analysis

No suspicious patterns detected.