T09 · Insecure Skill Coding Practices
Warning
- Location
- SKILL.md:9
- Finding
- Sensitive Wallet Context Transmitted to a Third-Party Service Without Privacy-Specific Approval## Vulnerability Details **File Location**: `SKILL.md`, lines 9–17 **Vulnerability Type**: Privacy-sensitive data disclosure through an external API **Risk Level**: Medium **Affected code:** ```markdown 1. Extract the public address, chain scope, desired balances/history/NFT view, pricing currency, and detail. Treat the address and its association with the user as sensitive context: minimize repetition and do not persist or disclose it. Never request seed phrases, private keys, signing, wallet connection, or transaction approval; never transact. **Done when:** the task is strictly read-only. 2. Read current documentation at `https://airnode-drpc.fly.dev/` and `https://airnode-coingecko.fly.dev/`. Use only documented POST operations and parameters; GET only reads documentation. **Done when:** schemas, costs, signer addresses, and verification rules are known. 3. Use the narrowest dRPC operation: `walletBalances`, `chainWalletBalances`, `nonEvmWalletBalances`, `netWorthHistory`, `chainNetWorthHistory`, `transactionHistory`, `walletNfts`, `nonEvmWalletNfts`, `nftCollections`, or `nftMetadata`. Use `supportedChains` when chain resolution is necessary. Keep limits conservative and never silently paginate or broaden chain scope. **Done when:** the minimum wallet call is selected. 4. Use CoinGecko `simplePrice` for current prices with explicit CoinGecko IDs and currencies; use `coinsMarkets` only for richer ranked data. Resolve ambiguous symbols rather than guessing. **Done when:** only required pricing calls are selected. 5. Before any paid, credentialed, quota-consuming, or uncertain-cost POST, state the cost and scope and obtain explicit approval. POST `{"operation":"<operation>","parameters":{...}}` with an HTTP-capable tool. Retry once for corrected schema or transient failure. **Done when:** attested results or an exact blocker is received. ``` ### Technical Analysis The skill explicitly treats the relationship between a wal ...[truncated 2505 chars]
- Remediation
- ## Remediation Suggestions 1. Require explicit, informed approval before transmitting any wallet address or related lookup parameters to an external service, regardless of request cost. 2. Identify the external recipient and explain that the service may observe the wallet address, request timing, and associated network metadata. 3. Replace the absolute “do not disclose” statement with precise language distinguishing prohibited disclosure from the user-approved API transmission required to perform the lookup. 4. Show the exact address, chain scope, operation, and destination that will be submitted before requesting approval. 5. Minimize transmitted data by using the narrowest operation, limiting chain coverage, avoiding unnecessary pagination, and excluding unrelated request metadata. 6. Document applicable retention, logging, and privacy controls for the external service. If those controls cannot be established, disclose that limitation to the user. 7. Where feasible, support a user-selected or locally operated endpoint to reduce third-party correlation risk. 8. Continue prohibiting collection or transmission of seed phrases, private keys, signatures, wallet connection approvals, and transaction authorizations.
