T09 · Insecure Skill Coding Practices
- Location
references/integration-patterns.md:15- Finding
Externally Supplied Transactions Are Signed Without Documented Instruction Validation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent for Solana trading development, but it asks users to install mutable external tooling and provides under-scoped guidance for real payments, key storage, KYC, and transaction signing.
Review before installing. Use a pinned, trusted Helius MCP version, restrict where it can read/write, avoid storing wallet keys or JWTs on shared machines, require explicit human approval before any signup, renewal, upgrade, or transaction signing, validate DFlow transaction instructions before signing, and prefer HTTPS plus backend-secret handling for API keys and KYC flows.
references/integration-patterns.md:15Externally Supplied Transactions Are Signed Without Documented Instruction Validation
references/helius-wallet-api.md:130API Keys Are Embedded in Request URLs
references/helius-sender.md:80Backend Sender Guidance Uses Unencrypted HTTP for Signed Transaction Submission
SKILL.md:34Recommended MCP Installation Executes an Unpinned Package Through npx
references/integration-patterns.md:151DFlow Proxy Example Exposes Unauthenticated Pass-Through Endpoints Without Validation or Rate Limits
references/dflow-proof-kyc.md:69KYC Wallet Signatures Are Placed in Browser Query Strings Without Replay-Binding Guidance
The skill covers wallet intelligence, holdings, history, and Proof KYC flows but does not prominently warn that these are privacy-sensitive operations or instruct the agent to minimize collection, retention, and display of personal data. In a trading and identity context, exposing wallet history or KYC state without explicit consent can create privacy harm, profiling risk, or improper handling of regulated identity information.
The skill instructs users to install an MCP server via npx helius-mcp@latest, which is an unpinned dependency and can change over time without review. If the upstream package is compromised or a breaking/malicious release is published, users could install and execute unintended code in a privileged local environment.
The quick-disambiguation section lists very short everyday phrases such as "trade", "swap", "setup", and "submit" as intents that route into this skill. While domain-relevant, these phrases are broad and the file does not provide negative examples or explicit boundaries to prevent accidental activation in adjacent contexts.
This is the same supply-chain risk repeated in the resources section: users are directed to run npx helius-mcp@latest, which fetches and executes the newest package version at install time. In an agent/tooling context, that creates a real avenue for malicious package updates or accidental insecure changes to be introduced downstream.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
SKILL_NAME="helius-dflow"
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"
# Default: install to personal skills
TARGET_BASE="$HOME/.claude/skills"
MODE="personal"
The installer instructs users to add an MCP server via npx helius-mcp@latest, which pulls and executes the newest published package version at install/use time rather than a reviewed, fixed version. This creates a supply-chain risk: if the package is compromised, typosquatted, or a bad release is published, users may execute untrusted code in their local environment.
The skill describes previewUpgrade, upgradePlan, and payRenewal as routine actions without an explicit caution that they trigger real USDC payments and may have immediate billing effects. In an agentic workflow, that omission is dangerous because users or downstream agents may treat these calls as informational rather than state-changing, leading to unintended charges or unauthorized plan changes.
The document states that API keys, JWTs, and keypairs are persisted to shared config and local files, but it does not prominently warn users about the security implications of local credential storage. In this context, the stored materials can grant ongoing access to Helius services, billing visibility, authenticated sessions, and wallet-based signup flows, so silent persistence increases the risk of credential theft, accidental sharing, or reuse on multi-user systems.
The install command uses npx helius-mcp@latest, which fetches and executes whatever package version is current at runtime. This creates a supply-chain risk: a compromised upstream package, malicious update, or unexpected breaking change could be executed immediately on the user's machine, and in this skill context the package would likely handle API keys, JWTs, and payment-capable workflows.
The guidance mandates skipPreflight: true and adds a required Jito tip transfer, but it does not clearly warn users that this bypasses client-side safety checks and can submit irreversible on-chain transactions that also transfer extra funds. In a trading skill, that omission is risky because integrators may copy the pattern directly and unknowingly expose users to failed or unintended transactions with real monetary loss.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
transaction.sign([keypair]);
// 5. Submit to Sender
const response = await fetch('https://sender.helius-rpc.com/fast', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
transaction.sign([keypair]);
// 5. Submit to Sender
const response = await fetch('https://sender.helius-rpc.com/fast', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
const signedTx = await signTransactionMessageWithSigners(tx);
const base64Tx = getBase64EncodedWireTransaction(signedTx);
const res = await fetch("https://sender.helius-rpc.com/fast", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
Subtle instructions detected that may alter agent decision-making or introduce hidden biases.
## MCP Tools
All Wallet API endpoints have direct MCP tools. ALWAYS use these instead of generating raw API calls:
| MCP Tool | Endpoint | What It Does |
|---|---|---|
This markdown file instructs the agent to investigate wallets using identity, balance, history, transfer, and funding-source tools, which can affect user privacy and attribution. The document does not include any warning or caution to users that these actions may reveal sensitive intelligence about individuals or entities.
The section provides concrete instructions for building an automated trading bot that reacts to live price signals and submits real transactions, but it does not include a clear warning that these actions can spend user funds and execute irreversible trades on mainnet. In a trading-focused skill, omission of this warning increases the chance that users deploy or adapt the example against live wallets without adequate safeguards, leading to unintended financial loss.
This markdown file documents calls like getAssetsByOwner with ownerAddress and display options that reveal SOL balance, fungible holdings, and collection metadata, but it does not warn users that these requests disclose wallet-associated portfolio data to an external service. For markdown files, SQP-2 applies when the skill description omits warnings about behaviors that could affect user privacy.
The document recommends a background setInterval ping loop but does not warn that it creates ongoing network traffic during idle periods. This can surprise users, increase observability/privacy exposure, and cause unnecessary resource consumption in client or server environments.