EEF-CVE-2026-67581
On-chain transfer proof is not single-use in mpp EVM payment method, enabling cross-challenge replay
Quick fix
EEF-CVE-2026-67581 — mpp: upgrade to the fixed version with the command below.
mix deps.update mppDetails
## Summary
Authentication Bypass by Capture-replay in ZenHive mpp allows an unauthenticated remote client to obtain paid resources by resubmitting one settled on-chain transfer.
`MPP.Methods.EVM.verify/2` accepts a transaction-hash credential and matches a transfer purely on `token`, `to` and `amount` (ERC-20) or `to` and `value` (native). It binds the proof neither to the challenge being verified nor to any record of prior use, and the generic `MPP.Plug` dedup store keys on `challenge.id`, which is regenerated for every 402 response. On a static-price route, a single historical transfer matching the charge therefore satisfies an unbounded number of later charges, including transfers an attacker can read off a public block explorer.
This issue affects mpp: from 0.3.0 before 0.6.3.
## Workarounds
Price each challenge uniquely (per-challenge or single-use amounts) so that a historical transfer cannot match a later charge, and keep challenge expiry short to narrow the window in which any given transfer stays useful. Deployments that can use the Tempo method for on-chain payments get per-challenge attribution binding instead.
Are you affected?
Enter the version of the package you're using.