Skip to content

szhygulin/recon-crypto-mcp

v0.5.0 Security

This release includes 2 security fixes for security teams reviewing exposed deployments.

Published 1mo MCP Developer Tools
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 2 known CVEs

Topics

aave ai-agent arbitrum claude claude-code compound
+13 more
crypto cursor defi ethereum ledger lifi mcp mcp-server model-context-protocol polygon solana uniswap walletconnect

Affected surfaces

auth rbac

Summary

AI summary

Two-step signing protocol closes on-device calldata‑integrity gap and adds defense‑in‑depth layers against compromised agents and MCP lies.

Full changelog

Minor release. New two-step signing protocol closes the on-device calldata-integrity gap in blind-sign mode, plus two new defense-in-depth layers against narrow agent compromise and compromised-MCP hash lies. Honest documentation of the full threat model in the README.

New

  • Two-step signing protocolprepare_* → preview_send → send_transaction. preview_send pins nonce + EIP-1559 fees server-side and emits a LEDGER BLIND-SIGN HASH block BEFORE the Ledger device prompt fires, so the hash the user must match is on-screen in chat at the moment the device prompts. Closes the core gap identified in #37: previously Ledger Live picked nonce + fees at send time, so the pre-sign RLP hash was unpredictable and the device displayed a value the user had no way to verify.
  • EIP-1559 pre-sign hash surfaced for blind-sign matchingkeccak256(serializeTransaction({type:"eip1559", chainId, nonce, maxFeePerGas, maxPriorityFeePerGas, gas, to, value, data})), emitted by preview_send in a verbatim-relay content block. This is what the Ledger device displays in blind-sign mode; matching it catches any bytes-tampering between MCP and device (Ledger Live malware, WalletConnect relay MITM).
  • Fee-pin formulabaseFee * 2 + max(estimateMaxPriorityFeePerGas, 1.5 gwei), replacing viem's default 1.2× baseFee. A live-test tx pinned with the default sat stuck in the mempool over the user-review window; the new formula survives short-term base-fee ramps.
  • TRANSACTION BROADCAST block — post-send verbatim-relay block carrying Chain, Tx hash, markdown explorer link. Closes a live-test regression where the orchestrator agent sometimes collapsed the raw send result and never surfaced the hash in chat, forcing the user to dig through Ledger Live.
  • PREPARE RECEIPT block (new) — every prepare_* response now carries a verbatim-relay block listing the raw args the agent supplied to the MCP server (tool name + each field). Raises the tampering bar against narrow agent compromise: prompt injection from other tool output, malicious Claude skills, compromised subagents in a delegation chain. The agent's bullet summary is free-composed prose; the receipt is receipts. A vigilant user whose intent diverges from the receipt catches the mutation before send.
  • Agent-side independent pre-sign hash recomputation (new)preview_send now emits an additional agent-task block instructing the agent to OFFER the user a fourth trust-boundary option: independently recompute the EIP-1559 pre-sign hash using its own prepare-time data + MCP's returned pin + viem (a code trust boundary separate from MCP). Catches a compromised MCP that returns a hash inconsistent with the bytes it forwards to WalletConnect. Per-call pinned values are spliced into a ready-to-run node -e command template.

Security-model documentation

New Security model section in the README: trust-boundary diagram, defenses-vs-threats table, threat→catch mapping, honest asymmetry note (the agent is a real second trust boundary against compromised-MCP; MCP has no user-intent ground truth to catch a fully-coordinated compromised-agent attack — this limit is named, not hidden). The server-side payloadFingerprint verification snippet is preserved with an explicit clarification that it is NOT what Ledger displays.

Behaviour changes

  • send_transaction without a prior preview_send now throws Missing pinned gas with a clear diagnostic. The preview step is load-bearing for the hash-match flow — refusing is the correct action. TRON handles skip preview (USB-HID clear-sign UX handles this path).
  • Fee estimation moved from send time to preview time. User-visible impact: slightly longer preview_send latency; no change to prepare_* latency.

Tests

  • test/send-hash-pin.test.ts (7) — EIP-1559 pre-sign hash helper, the verbatim-relay blocks, the preview/send split.
  • test/integration-security.test.ts (5) — PREPARE RECEIPT reveals a prompt-injected to; honest MCP's hash matches an independent recompute; a to-swap at forwarding time produces a divergent device hash; MCP lying about preSignHash is caught by the agent's recompute.
  • 409/409 tests pass. npm audit → 0 vulnerabilities.

Internal references

PRs #37 (pin gas + pre-sign hash), #39 (preview/send split, PREPARE RECEIPT, agent hash recompute, security-model docs), #40 (version bump).

Breaking Changes

  • `send_transaction` without a prior `preview_send` now throws `Missing pinned gas`.

Security Fixes

  • Two-step signing closes the core calldata‑integrity gap in blind‑sign mode (addresses issue #37).
  • Added `PREPARE RECEIPT` block and agent‑side independent pre‑sign hash recomputation to detect compromised agents or MCP hash lies.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track szhygulin/recon-crypto-mcp

Get notified when new releases ship.

Sign up free

About szhygulin/recon-crypto-mcp

Self-custodial crypto portfolio for AI agents. Reads EVM wallet balances, ENS, token prices, and DeFi positions across Ethereum/Arbitrum/Polygon/Base (Aave V3, Compound V3, Morpho Blue, Uniswap V3 LP, Lido, EigenLayer), surfaces health-factor alerts and protocol risk scores, then prepares unsigned transactions (supply, borrow, repay, withdraw, stake, send, LiFi swap/bridge) signed on Ledger via WalletConnect — private keys never leave the hardware wallet.

All releases →

Beta — feedback welcome: [email protected]