Back to skill

Security audit

Helius API

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Solana/Helius API reference skill, with a credential-handling documentation risk but no hidden execution, persistence, or unrelated data access.

Use this skill only with wallet addresses and transaction signatures you are comfortable sending to Helius. Set a scoped Helius API key where possible, prefer the X-Api-Key header instead of placing the key in URLs, and avoid logging full request URLs that contain credentials.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:26
Finding
Helius API Credential Exposed Through URL Query Strings<![CDATA[ ## Vulnerability Details **File Locations**: - `SKILL.md:26-29` - `references/balances.md:51-63` - `references/history.md:40-49` - `references/enhanced-transactions.md:7-9` - `references/enhanced-transactions.md:84-92` **Vulnerability Type**: API credential exposure through request URLs **Risk Level**: Medium ### Vulnerable Code `SKILL.md:26-29`: ```markdown - **Wallet API:** `https://api.helius.xyz/v1/wallet/{address}/...?api-key=KEY` - **Enhanced Transactions:** `https://api-mainnet.helius-rpc.com/v0/...?api-key=KEY` Auth: `?api-key=$HELIUS_API_KEY` query param or `X-Api-Key` header. ``` `references/balances.md:51-63`: ```javascript let allBalances = []; let page = 1; let hasMore = true; while (hasMore) { const res = await fetch(`https://api.helius.xyz/v1/wallet/${addr}/balances?api-key=${KEY}&page=${page}`); const data = await res.json(); allBalances.push(...data.balances); hasMore = data.pagination.hasMore; page++; } ``` `references/history.md:40-49`: ```javascript let all = [], before = null; do { const url = `https://api.helius.xyz/v1/wallet/${addr}/history?api-key=${KEY}${before ? `&before=${before}` : ''}`; const data = await (await fetch(url)).json(); all.push(...data.data); before = data.pagination.hasMore ? data.pagination.nextCursor : null; } while (before); ``` `references/enhanced-transactions.md:7-9`: ```markdown ## Parse Transactions `POST https://api-mainnet.helius-rpc.com/v0/transactions/?api-key=KEY` ``` `references/enhanced-transactions.md:84-92`: ```javascript let all = [], lastSig = null; while (true) { let url = `https://api-mainnet.helius-rpc.com/v0/addresses/${addr}/transactions?api-key=${KEY}`; if (lastSig) url += `&before-signature=${lastSig}`; const txs = await (await fetch(url)).json(); if (!Array.isArray(txs) || txs.length === 0) break; all.push(...txs); lastSig = txs[txs.length - 1].signature; } ``` ### Technical Analysis The documentation encourages users and agents to interp ...[truncated 2275 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove query-string authentication from all documentation and executable examples. 2. Use the supported `X-Api-Key` request header exclusively: ```javascript const url = `https://api.helius.xyz/v1/wallet/${encodeURIComponent(addr)}/balances?page=${page}`; const res = await fetch(url, { headers: { "X-Api-Key": KEY } }); ``` 3. Use the equivalent header for command-line examples: ```bash curl \ -H "X-Api-Key: $HELIUS_API_KEY" \ "https://api.helius.xyz/v1/wallet/$ADDRESS/balances?page=1" ``` 4. Validate or encode wallet addresses, transaction signatures, cursors, and other values before inserting them into URLs. 5. Configure application, proxy, and observability logs to redact `X-Api-Key`, `Authorization`, and any legacy `api-key` query parameters. 6. Avoid printing complete request configuration objects or headers during debugging. 7. Rotate any API key previously used in query-string examples if complete URLs may have been logged. 8. Apply Helius-side usage limits, monitoring, and key scoping where supported to reduce the impact of credential compromise. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Vague Triggers

Medium
Confidence
90% confidence
Finding
The activation description includes generic phrases such as "wallet history," "transaction details," and "check solana address" alongside a broad catch-all of "other Solana on-chain data." In a manifest/markdown context, these terms are not narrowly constrained and could overlap with ordinary requests, increasing the chance of unintended invocation.

External Transmission

Medium
Category
Data Exfiltration
Content
## Base URLs

- **Wallet API:** `https://api.helius.xyz/v1/wallet/{address}/...?api-key=KEY`
- **Enhanced Transactions:** `https://api-mainnet.helius-rpc.com/v0/...?api-key=KEY`

Auth: `?api-key=$HELIUS_API_KEY` query param or `X-Api-Key` header.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## Base URLs

- **Wallet API:** `https://api.helius.xyz/v1/wallet/{address}/...?api-key=KEY`
- **Enhanced Transactions:** `https://api-mainnet.helius-rpc.com/v0/...?api-key=KEY`

Auth: `?api-key=$HELIUS_API_KEY` query param or `X-Api-Key` header.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## Base URLs

- **Wallet API:** `https://api.helius.xyz/v1/wallet/{address}/...?api-key=KEY`
- **Enhanced Transactions:** `https://api-mainnet.helius-rpc.com/v0/...?api-key=KEY`

Auth: `?api-key=$HELIUS_API_KEY` query param or `X-Api-Key` header.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Low
Confidence
95% confidence
Finding
The documentation places the API key directly in the URL query string, which is risky because full URLs are commonly captured in browser history, server/access logs, proxy logs, monitoring systems, and referrer headers. Even in reference documentation, this pattern can encourage downstream implementations that leak credentials unintentionally.

Static analysis

No suspicious patterns detected.