T09 · Insecure Skill Coding Practices
- Location
SKILL.md:41- Finding
Bitcoin Watch Address Disclosed to an Unintended Lookalike Domain
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This read-only Bitcoin tracker is mostly coherent, but one documented UTXO command sends the watch address to a misspelled lookalike domain, creating an avoidable privacy risk.
Review this skill before installing if BTC address privacy matters to you. The main issue is the misspelled UTXO endpoint; it should be corrected to mempool.space or, preferably, replaced with a user-configured local node, Electrum server, or self-hosted mempool API before using a real watch address.
SKILL.md:41Bitcoin Watch Address Disclosed to an Unintended Lookalike Domain
Calling CoinGecko transmits usage metadata and may reveal user interest patterns, especially when correlated with other skill activity. In this skill’s context, the external price query is less sensitive than address lookups, but it still creates a third-party dependency and privacy leak that may matter to sovereignty-focused users.
curl -s "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd,eur,sek" | jq .
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
|----------|---------|-------------|
| `BTC_WATCH_ADDRESS` | (required) | Bitcoin address to monitor (watch-only) |
| `MEMPOOL_API` | `https://mempool.space/api` | Mempool API base (change for self-hosted) |
| `COINGECKO_API` | `https://api.coingecko.com/api/v3` | Price API base |
| `ZK_BANKIR_HOST` | `http://localhost:3000` | ZK-Bankir server for vault status |
## Troubleshooting
The manifest description limits the skill to BTC self-custody metrics such as vault health, mempool fees, UTXO management, and on-chain verification. However, the documented core commands also include querying CoinGecko for BTC/USD/EUR/SEK price data, which is separate market-price tracking rather than an obvious self-custody or on-chain verification function.
The phrase "When the user asks for a BTC sovereignty status" is an imprecise invocation description rather than a specific trigger. It does not define concrete trigger phrases, scope boundaries, or negative examples, so related everyday requests about BTC status could ambiguously match.