GHSA-qpxh-ff8m-c62vMedium▾ Sunlitmpp vulnerable to Gas Draining with access list
▾ Sunlit zone — Low / medium · no exploitation signal
impact 27.5 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
When the server acts as the fee_payer, mpp Elixir 0.4.0 copies the client-supplied EIP-2930 access list verbatim into the cosigned fee-payer transaction. In cosign_fee_payer, the server re-signs the raw base_fields (index 5 of the 0x76 AASigned envelope) without inspecting the access list field, which is part of the signed payload.
Access list gas is charged intrinsically — before any opcode executes — regardless of whether the listed addresses are ever touched.
An attacker submits a valid transferWithMemo alongside fabricated address-only access list entries. The server validates calldata and amount but never inspects access_list length. It cosigns and broadcasts a transaction that costs the fee-payer wallet N × 2,400 extra gas per request with no corresponding work performed on-chain.
At the default of 137 entries and 100 Gwei max_fee_per_gas, this inflates the fee-payer cost from the normal ~51,287 gas to ~380,087 gas — a 7.4× multiplier — while staying within Bandit's default 10,000-byte per-header-field limit (verified empirically).
The PoC is provided below. It is configured to reproduce the attack on Tempo Moderate testnet within a Docker environment. Download the PoC and run:
unzip mpp_elixir_PoC.zip
cd mpp_elixir
docker build -t mpp-elixir-access-list .
docker run --rm mpp-elixir-access-list
There are more details in mpp_elixir/README.md
A malicious client can force the server to pay ~7.4x the normal transaction fee. This dramatically increases operational costs and completely destroys the profit margin on low-cost items.
mpp >= 0.2.0, < 0.6.0Upgrade to a patched release:
mpp 0.6.0Connected by shared product, vendor, weakness, or advisory.
GHSA-vv77-66rf-pm86Highmpp vulnerable to Gas Draining with no limit
GHSA-vj8p-hp9x-gh47Highmpp vulnerable to Gas Draining with low gas limit
CVE-2026-87119High· 8.2Authentication Bypass by Capture-replay in ZenHive mpp allows an attacker holding a captured subscription activation credential to charge the payer repeatedly. The payer signs a Tempo KeyAuthorization over the chain id, key type, key id…
CVE-2026-89420High· 7.1Improper Validation of Specified Quantity in Input in ZenHive mpp allows a client holding an open payment channel to obtain paid resources without being charged. MPP.Session.Actions.accept_voucher/3 in lib/mpp/session/actions.ex treats …
CVE-2026-88255Medium· 6.3Improper Validation of Unsafe Equivalence in Input in ZenHive mpp allows an unauthenticated remote client to pass the Tempo duplicate-submission gate twice with one signed transaction. MPP.Methods.Tempo reserves the pre-broadcast dedup …
CVE-2026-89186Medium· 6.3Use of Cache Containing Sensitive Information in ZenHive mpp allows a shared HTTP cache to store a paid response and serve it to clients that never paid. MPP.Plug.verify_credential in lib/mpp/plug.ex sets payment-receipt and cache-contr…