T05 · Unauthorized Access and Privilege Escalation
Error
- Location
- SKILL.md:10
- Finding
- Wallet Seed Phrase Required for a Read-Only Staking Query## Vulnerability Details **File Location**: `SKILL.md`, lines 10–14 **Vulnerability Type**: Excessive access to wallet recovery credentials **Risk Level**: High ```yaml requires: env: [SEED_PHRASE] install: - kind: node package: "@indigoprotocol/cardano-mcp" ``` ### Technical Analysis The skill requires a complete wallet seed phrase even though its documented purpose is limited to retrieving the delegated stake pool and available staking rewards. These are read-only operations that can ordinarily be performed using a public stake address, reward address, or another read-only wallet identifier. A seed phrase is not merely an API credential: it is sufficient to derive the wallet's private keys and authorize transactions. Supplying it to the external MCP server process therefore grants substantially more privilege than the documented task requires and violates the principle of least privilege. The implementation of `@indigoprotocol/cardano-mcp` is not included in the audited project. Consequently, this project does not provide evidence that the seed phrase is isolated, never logged, never transmitted, securely erased, or otherwise protected by the server. ### Attack Path 1. A user installs and runs the declared `@indigoprotocol/cardano-mcp` server. 2. The user exposes the wallet recovery phrase through the `SEED_PHRASE` environment variable. 3. The external MCP process inherits or reads that environment variable. 4. If the dependency, one of its transitive dependencies, or its runtime environment is compromised, the seed phrase can be copied, logged, or transmitted. 5. An attacker can use the recovered phrase to derive wallet private keys. 6. The attacker can then sign unauthorized transactions and transfer assets controlled by the wallet. ### Impact Assessment Exposure of the seed phrase can provide control over every wallet key derived from that phrase, rather than access being limited to staking info ...[truncated 300 chars]
- Remediation
- ## Remediation Suggestions - Remove `SEED_PHRASE` from the skill's required environment variables. - Use a public stake address, reward address, or another read-only wallet identifier for delegation and reward queries. - If a future operation requires signing, use a hardware wallet or an isolated signing interface that requests explicit approval for each transaction without revealing the recovery phrase. - Separate read-only query functionality from transaction-signing functionality and assign each component only the minimum required permissions. - Document which wallet data the MCP server receives, where it is processed, and whether any network service receives it. - Add tests or policy checks that prevent read-only skills from declaring recovery phrases or private keys as required inputs. - Advise existing users who supplied their phrase to an untrusted or unverifiable implementation to assess possible exposure and migrate funds to a newly generated wallet if compromise is suspected.
