Back to skill

Security audit

chord-swap

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent, but its Solana instructions let the agent relay a signed transaction despite claiming it only prepares unsigned transactions and never moves funds.

Review before installing. This skill may be acceptable only if you are comfortable with Chord receiving and broadcasting signed Solana transactions. For a stricter non-custodial boundary, the Solana send step should be removed or clearly disclosed with explicit user control, and users should broadcast signed transactions through their own wallet instead.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (15)

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The examples state that after the user signs a Solana transaction, the agent submits the signed transaction to an external API and then tracks the resulting on-chain transaction. This contradicts the stated boundary that the skill only returns unsigned transactions, and expands the agent from an informational/preparation role into active execution of fund-moving actions.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The documentation explicitly describes the agent submitting a signed Solana transaction despite the manifest claiming it only returns unsigned transactions. This kind of scope mismatch is dangerous because users, reviewers, and policy gates may trust the narrower manifest while the actual documented behavior enables transaction execution.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The Solana instructions explicitly tell the agent to submit a signed transaction to Chord's /send endpoint after the user signs it. That contradicts the skill metadata stating it only returns unsigned transactions and never moves funds, meaning the skill as documented can complete a live asset-moving swap rather than stopping at quote generation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The documented workflow extends beyond generating an unsigned transaction and instructs transmission of a user-signed Solana transaction to an external API for execution. This safety-model mismatch is dangerous because users or higher-level systems may rely on the manifest's claim that the skill cannot move funds, while the reference enables exactly that behavior.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 25)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/examples.md (reported line 11)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/examples.md (reported line 26)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/examples.md (reported line 30)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/examples.md (reported line 32)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/solana.md (reported line 12)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/solana.md (reported line 20)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/solana.md (reported line 27)May include surrounding context.

md
the zero address. 100 USDC = `100000000`.
2. Safety check: not needed for the native coin.
3. Price quote:
   `GET https://api.getchord.xyz/v1/meta/quote?chain=base&tokenIn=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&tokenOut=0x0000000000000000000000000000000000000000&amount=100000000`
   → `provider: "chord"`, `amountOut` about 0.0411 ETH, price impact 0.00 %.
4. The agent answers:

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The example says the agent checks the receipt and provides an explorer link after the wallet sends the approval and swap transactions. While less severe than submitting a signed transaction itself, this still exceeds the documented scope of quoting and returning unsigned transactions and implies post-execution monitoring of user activity.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
97% confidence
Finding

At this line, the example has the agent POST a signed Solana transaction to an external endpoint for broadcast. Sending a user-signed transaction to a third party for execution is materially more sensitive than normal quote retrieval and enables the skill to directly cause on-chain state changes, contrary to the stated trust boundary.

Content

Scanner excerpt · references/examples.md (reported line 36)May include surrounding context.

md
→ `quote.route` `direct` (Orca) or `jupiter`, `outAmount` and `minOut` in BONK's smallest unit.
4. Summary, then wait for the user's yes in a later message.
5. The user's wallet signs `quote.tx` unchanged; the agent sends it with
   `POST https://api.getchord.xyz/v1/sol/trade/send` `{"tx": "<signed, base64>"}` and links
   `https://solscan.io/tx/<signature>`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This endpoint sends a signed Solana transaction blob to Chord for broadcast, enabling the skill to move user funds on-chain once a signature is obtained. In context, this is more dangerous because the skill metadata expressly claims it never moves funds and only returns unsigned transactions, so the external transmission is not just informational but an execution step hidden behind contradictory safety claims.

Content

Scanner excerpt · references/solana.md (reported line 49)May include surrounding context.

md
The user's wallet signs `quote.tx` unchanged (any change and Chord refuses it). Then:

`POST https://api.getchord.xyz/v1/sol/trade/send` with JSON body `{"tx": "<signed transaction, base64>"}`

The answer has `signature` and `status` (`pending`, `confirmed`, `finalized`, `failed`, `expired`),
plus `receivedOut` once it landed. Errors: `UNKNOWN_TRANSACTION` (older than three minutes, or changed

Static analysis

No suspicious patterns detected.