Back to skill

Security audit

Solana Connect

Security checks for vulnerabilities and agentic risk

Overview

This Solana skill can move real funds, but its private-key and approval safeguards are weaker than its documentation claims.

Review this carefully before installing. Do not provide a funded wallet private key to this skill unless the runtime is isolated and trusted, keep dryRun enabled by default, avoid skipConfirmation for live transfers, use only trusted RPC endpoints, and prefer a hardware wallet, custody service, or external signer rather than passing private keys through an agent-facing API.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/solana.js:149
Finding

Human-confirmation and mainnet safeguards can be bypassed through an agent-controlled option

Content
View full analysis
MAX_SOL_PER_TX) { throw new Error(`Amount ${amount} SOL exceeds max limit of ${MAX_SOL_PER_TX} SOL`); } // SECURITY: Check testnet (warn if mainnet) const connection = getConnection(DEFAULT_RPC); if (!isTestNet(DEFAULT_RPC) && dryRun === false && !skipConfirmation) { console.warn('⚠️ WARNING: Running on MAINNET with real transactions!'); } // SECURITY: Require human confirmation for large amounts if (amount >= REQUIRE_HUMAN_CONFIRMATION && !skipConfirmation && dryRun === false) { throw new Error(`Amount ${amount} SOL requires human confirmation (threshold: ${REQUIRE_HUMAN_CONFIRMATION} SOL)`); } ``` The transaction is subsequently broadcast without any independent authorization check: ```javascript // Send real transaction const txSignature = await connection.sendRawTransaction(transaction.serialize()); ``` The bypass is also explicitly documented in `SKILL.md:91-94`: ```javascript // Skip human confirmation (for automated agents) await sendSol(key, to, amount, { dryRun: false, skipConfirmation: true }); ``` ### Technical Analysis The purported human-confirmation control is only a Boolean condition controlled by the same caller requesting the transaction. Setting `skipConfirmation` to `true` disables the large-transfer rejection. It also suppresses the mainnet ...[truncated 1864 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/solana.js:140
Finding

Raw private keys cross the agent-facing API boundary despite key-isolation claims

Content
View full analysis
MAX_SOL_PER_TX) { throw new Error(`Amount ${amount} SOL exceeds max limit of ${MAX_SOL_PER_TX} SOL`); } // SECURITY: Check testnet (warn if mainnet) const connection = getConnection(DEFAULT_RPC); if (!isTestNet(DEFAULT_RPC) && dryRun === false && !skipConfirmation) { console.warn('⚠️ WARNING: Running on MAINNET with real transactions!'); } // SECURITY: Require human confirmation for large amounts if (amount >= REQUIRE_HUMAN_CONFIRMATION && !skipConfirmation && dryRun === false) { throw new Error(`Amount ${amount} SOL requires human confirmation (threshold: ${REQUIRE_HUMAN_CONFIRMATION} SOL)`); } try { // Create keypair from ...[truncated 2541 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/solana.js:36
Finding

Unrestricted RPC endpoint selection enables SSRF-style internal network requests

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (17)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The README explicitly claims private keys are never exposed to the agent, yet the documented API and examples require passing raw private keys into functions such as connectWallet(privateKey) and sendSol(privateKey, ...). In an AI-agent context, this contradiction is dangerous because developers may trust the safety claim and then wire sensitive credentials directly into agent-controlled execution paths, enabling theft or misuse of funds if the agent, logs, prompts, or integrations leak the key.

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
97% confidence
Finding

The bundled ws 8.19.0 is flagged for both uninitialized memory disclosure and memory-exhaustion DoS. In a blockchain connectivity skill, websocket connections are a normal feature, so a vulnerable websocket stack materially increases risk because a malicious or compromised RPC endpoint could trigger data leakage or exhaust agent resources.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==7.5.10 — 1 advisory(ies): CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
96% confidence
Finding

The lockfile also contains ws 7.5.10, which is flagged for memory-exhaustion DoS from fragmented websocket input. Because this skill interacts with Solana infrastructure and network services, any vulnerable websocket client/server component increases exposure to remote resource exhaustion, especially if the agent connects to untrusted or attacker-influenced endpoints.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The README markets dry-run as the safe default, but nearby examples show real transactions can be sent with skipConfirmation: true, undermining the stated human-in-the-loop control. In an autonomous agent setting, this normalizes disabling a critical safeguard and could lead to irreversible transfers without meaningful review if an agent is induced to execute the example pattern.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The transaction API is documented as accepting a raw private key, but the README does not give a clear, prominent warning that this credential grants full control over funds and must never be exposed to agent prompts, logs, telemetry, or untrusted plugins. In the context of an AI-agent skill, this is especially dangerous because agent frameworks commonly serialize inputs and outputs, making accidental secret disclosure or misuse much more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README provides a concrete example for bypassing human confirmation on a real blockchain transaction but does not clearly warn that transfers are irreversible and may result in immediate loss of funds. Because this skill is specifically intended for AI agents interacting with Solana, showing the bypass as routine usage increases the chance operators adopt unsafe patterns in high-risk automated workflows.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill declares environment-variable requirements and provides executable integration guidance, but it does not define any explicit tool scope such as permissions or allowed-tools. In an agent platform, that ambiguity can let the runtime or operator grant broader capabilities than intended, increasing the chance of unsafe environment access or misuse of sensitive configuration during blockchain operations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation includes a real transfer example using dryRun: false together with skipConfirmation: true, which normalizes bypassing human review for an irreversible on-chain action. Because Solana transfers are final once broadcast, an agent or operator copying this example could unintentionally authorize live asset movement without an adequate warning about permanence, fraud risk, or operational safeguards.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file advertises that testnet mode is enforced, but the implementation accepts an environment-controlled RPC URL and only checks mainnet at runtime for a warning. In an agent skill that can sign and submit blockchain transactions, this misleading guarantee can cause operators or upstream agents to assume funds are safe while real mainnet transfers remain possible.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

A real transfer can proceed without an actual interactive confirmation mechanism when skipConfirmation is set, and on mainnet the code may only emit a console warning. For an AI-agent-facing wallet skill, this is dangerous because programmatic callers can bypass intended safeguards and trigger irreversible fund movement without meaningful human authorization.

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
90% confidence
Finding

The lockfile pins bn.js 5.2.2, which is reported as affected by an infinite-loop issue. Although this is not obviously attacker-introduced, a vulnerable arithmetic library can still enable denial of service if untrusted data reaches the affected code paths through blockchain parsing or serialization logic.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: stream-json==1.9.1 — 1 advisory(ies): CVE-2026-71429 (stream-json: pick/ignore/filter/replace filters are O(depth²) on nested input — )

Low
Category
Supply Chain
Confidence
87% confidence
Finding

stream-json 1.9.1 is reported as having O(depth^2) behavior in certain filters on deeply nested input, which can enable algorithmic-complexity denial of service. Here it is a transitive dependency of jayson, so exploitation depends on whether the affected filters are actually used on attacker-controlled JSON, but the package version itself is vulnerable.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: uuid==8.3.2 — 1 advisory(ies): CVE-2026-41907 (uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided)

Low
Category
Supply Chain
Confidence
80% confidence
Finding

uuid 8.3.2 is flagged for missing buffer bounds checks in specific version-generation functions when a caller supplies a buffer. This is likely a low-probability issue in this skill because it is transitive and may not be exercised, but the dependency version itself is still vulnerable and could cause crashes or memory-safety issues depending on runtime behavior.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency uses a caret range, which allows newer compatible versions to be installed over time. In a blockchain-interacting skill, this increases supply-chain risk because a compromised or breaking upstream release of @solana/web3.js could be pulled in without deliberate review, affecting transaction construction or key-handling logic.

Content

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

json
"test": "node test.js"
  },
  "dependencies": {
    "@solana/web3.js": "^1.98.0",
    "bs58": "^6.0.0",
    "tweetnacl": "^1.0.3"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The bs58 dependency is specified with a caret version, so installs may resolve to different future releases. Even for a small utility library, this creates avoidable supply-chain exposure, and in a wallet/blockchain context an unexpected dependency change could affect address/key encoding behavior or introduce malicious code.

Content

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

json
},
  "dependencies": {
    "@solana/web3.js": "^1.98.0",
    "bs58": "^6.0.0",
    "tweetnacl": "^1.0.3"
  },
  "keywords": [

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

tweetnacl is a cryptographic library, and leaving it unpinned permits automatic adoption of future releases without explicit validation. In a Solana connection skill that likely handles signatures or key material, a compromised or flawed update could directly impact cryptographic operations and therefore has somewhat higher security significance than a generic library.

Content

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

json
"dependencies": {
    "@solana/web3.js": "^1.98.0",
    "bs58": "^6.0.0",
    "tweetnacl": "^1.0.3"
  },
  "keywords": [
    "solana",

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The comment suggests the RPC is safely constrained to testnet, but the environment variable override permits arbitrary endpoints, including mainnet or attacker-controlled RPC infrastructure. In this skill context, that discrepancy weakens trust assumptions and can expose transaction handling to unintended networks or manipulated RPC behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.