Skip to main content

ZenHive mpp CVE-2026-59252

| EUVDEUVD-2026-45160 HIGH
Improper Validation of Specified Quantity in Input (CWE-1284)
2026-07-17 EEF GHSA-vp7w-82cm-hj3h
8.2
CVSS 4.0 · Vendor: EEF
Share

Severity by source

Vendor (EEF) PRIMARY
8.2 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
7.5 HIGH

Unauthenticated network request to a sponsor endpoint (PR:N, AV:N, AC:L) causes only availability loss via wallet drain (A:H); no data confidentiality or integrity impact, and scope stays within the vulnerable server.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

3
Source Code Evidence Fetched
Jul 17, 2026 - 10:48 vuln.today
Analysis Generated
Jul 17, 2026 - 10:48 vuln.today
CVE Published
Jul 17, 2026 - 10:11 cve.org
HIGH 8.2

DescriptionCVE.org

Improper Validation of Specified Quantity in Input in ZenHive mpp allows an unauthenticated remote client to drain the fee-payer wallet, resulting in denial of service for legitimate clients.

When the mpp Elixir library is configured as fee payer (fee_payer: true), the MPP.Methods.Tempo payment method co-signs and broadcasts a client-supplied EVM transaction without first validating that the client-supplied gas_limit is sufficient to complete the intended call. A malicious client can submit a signed transferWithMemo transaction with gas_limit deliberately set just below the amount required for successful execution. The server co-signs the transaction and broadcasts it via rpc_broadcast_sync. The transaction runs out of gas during EVM execution and reverts, but the fee-payer wallet is still charged for the burned gas while the client pays nothing and receives no resource. Repeated requests from one or more malicious clients drain the fee-payer wallet at near-zero cost to the attacker, ultimately preventing the server from sponsoring gas for legitimate payment requests.

The wait_for_confirmation = false (optimistic) path is also affected: it invokes simulate_payment_call via eth_call, but that simulation omits the gas parameter and therefore does not catch out-of-gas conditions.

This issue affects mpp: from 0.2.0 before 0.6.0.

AnalysisAI

Wallet-draining denial of service in ZenHive mpp (Elixir library) versions 0.2.0 through 0.5.x affects deployments configured as a Tempo fee payer (fee_payer: true), where the MPP.Methods.Tempo method co-signs and broadcasts a client-supplied EVM transaction without verifying the client's gas_limit is high enough to complete execution. An unauthenticated remote client can submit a signed transferWithMemo transaction with gas_limit set just below the required amount, causing an on-chain out-of-gas revert that still charges the sponsor's fee-payer wallet while the attacker pays nothing. There is no public exploit identified at time of analysis and this is not on CISA KEV, but repeated low-cost requests can exhaust the sponsor wallet and stop the server from funding gas for legitimate payment requests.

Technical ContextAI

mpp is an Elixir library implementing the Meta Payment Protocol (MPP) for sponsored/gas-abstracted payments on the Tempo EVM chain, where the server acts as fee payer and co-signs client-originated transactions (the 0x76 / transferWithMemo envelope) before broadcasting them via rpc_broadcast_sync. The root cause is CWE-1284 (Improper Validation of Specified Quantity in Input): the server accepts the client-specified gas_limit at face value and never checks it is sufficient to complete the intended EVM call before committing sponsor funds. In Ethereum/EVM semantics, gas consumed up to the point of an out-of-gas revert is still deducted from the transaction's fee payer, so an underspecified gas_limit burns real value from the sponsor while producing no useful state change. The optimistic path (wait_for_confirmation = false) is also exposed because its simulate_payment_call uses eth_call without a gas parameter, so the simulation cannot reproduce or catch the out-of-gas condition. Affected products per CPE are cpe:2.3:a:zenhive:mpp:*.

RemediationAI

Upgrade mpp to 0.6.0 or later (Vendor-released patch: 0.6.0); the fix is in commit d84e3e528db39654540c2035ea0fbdf7b950d3d1, which adds pre-broadcast simulation of the full co-signed sponsored transaction via eth_simulateV1 on both the synchronous and optimistic paths so a transaction that would revert on-chain is rejected before the sponsor commits any gas, with graceful degradation if the node lacks eth_simulateV1 (JSON-RPC -32601) and fail-closed behavior on other RPC errors; note this release also advanced the onchain_tempo dependency to ~> 0.3 for the sender-recovery and simulate-request primitives. Operators upgrading should confirm their Tempo RPC endpoint supports eth_simulateV1 to get the protection rather than the graceful-degradation fallback. If immediate patching is not possible, the effective compensating control is to disable the fee-payer role (set fee_payer: false) so the server stops sponsoring client-supplied transactions - this fully removes the attack surface but also removes the gas-abstraction feature legitimate clients rely on; alternatively, restrict access to the fee-payer endpoint to trusted/authenticated clients and rate-limit sponsorship requests to slow wallet drainage, keeping the sponsor wallet funded with only a small working balance so a drain attempt is capped and alertable. See the advisory at https://github.com/ZenHive/mpp/security/advisories/GHSA-vj8p-hp9x-gh47.

Share

CVE-2026-59252 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy