CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-VV77-66RF-PM86

GHSA-vv77-66rf-pm86: Gas Draining Vulnerability in mpp Multi-Party Payments Library

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 26, 2026·5 min read·4 visits

Executive Summary (TL;DR)

Unvalidated transaction gas parameters in the `mpp` library allow remote attackers to drain the server's wallet funds via sponsored transaction fee exploitation.

A critical-severity input validation vulnerability in the Elixir multi-party payment library `mpp` allows unauthenticated remote attackers to exhaust the transaction fee payer's wallet balance. By submitting a crafted Ethereum transaction envelope with artificially inflated gas parameters, an attacker can force the server to co-sign and commit to pay exorbitant fees, leading to severe financial loss and Denial of Service.

Vulnerability Overview

The Elixir package mpp provides Multi-Party Payment handling and transaction protocol capabilities. When acting as a sponsored transaction gateway, the service acts as a fee payer, co-signing client transactions and broadcasting them to the Ethereum network.

Under this model, the service operator commits to covering the gas costs associated with user transactions, facilitating frictionless interactions for end-users. However, this architectural design exposes a significant attack surface if input verification is solely limited to checking the transaction destination and cryptographic signature.

Prior to version 0.6.0, the mpp library failed to evaluate the gas economics metrics of incoming transaction envelopes before initiating the co-signing process. This lack of checking constitutes a severe input validation flaw, categorizable under CWE-20.

Root Cause Analysis

The root cause of the vulnerability lies in the implementation of the cosign_fee_payer/3 function inside lib/mpp/methods/tempo.ex. The function verified that the transaction parameters matched an expected destination address and call data scope (the allowed interactions), but it performed no evaluation on the gas parameters encoded in the RLP envelope.

Specifically, the RLP indices corresponding to gas_limit, max_fee_per_gas, max_priority_fee_per_gas, and the access_list were processed and signed without any bounding checks. In EVM-compatible networks, the final cost of a transaction is determined by the actual gas consumed multiplied by the effective gas price, bounded by the parameters defined in the transaction envelope.

Because the library did not enforce a maximum ceiling on these fields, a client could provide a signed 0x76 envelope with extremely large values. When the server signed the envelope as the fee payer, it legally committed its wallet to paying those fees upon block execution, allowing the transaction to be mined at an inflated rate.

Code Analysis

The vulnerability was resolved by introducing a validation layer before the cryptographic signing phase. The updated pipeline in lib/mpp/methods/tempo.ex incorporates a call to maybe_validate_fee_payer_economics/3.

# In lib/mpp/methods/tempo.ex
# Validation step added prior to co-signing
defp maybe_validate_fee_payer_economics(tx, %{"fee_payer" => true} = config, chain_id) do
  policy = FeePayerPolicy.resolve(chain_id, config["fee_payer_policy"])
  FeePayerPolicy.validate(tx, policy)
end
defp maybe_validate_fee_payer_economics(_tx, _config, _chain_id), do: :ok

The validation is executed by the newly added MPP.Methods.Tempo.FeePayerPolicy module. This module defines maximum bounds and performs a series of safety checks on the raw RLP-decoded elements. The critical fields checked include:

  • gas_limit (checked against max_gas limit)
  • max_fee_per_gas (checked against max_fee_per_gas limit)
  • Cumulative Fee Cap: The product of gas_limit * max_fee_per_gas must not exceed max_total_fee (defaulting to 0.05 ETH).
# In lib/mpp/methods/tempo/fee_payer_policy.ex
def validate(%Transaction{} = tx, %__MODULE__{} = policy, now) when is_integer(now) do
  with {:ok, gas_limit} <- field_int(tx, @gas_limit_index, "gas_limit"),
       {:ok, max_fee} <- field_int(tx, @max_fee_index, "max_fee_per_gas"),
       {:ok, max_priority} <- field_int(tx, @max_priority_fee_index, "max_priority_fee_per_gas"),
       :ok <- check_gas(gas_limit, policy),
       :ok <- check_max_fee(max_fee, policy),
       :ok <- check_total_fee(gas_limit, max_fee, policy),
       :ok <- check_priority(max_priority, max_fee, policy),
       :ok <- check_nonce_key(tx),
       :ok <- check_validity_window(tx, policy, now) do
    check_access_list(tx)
  end
end

Additionally, the patch enforces that the access_list must be empty, removing the potential for payload padding, and implements strict validity time-windows to prevent replay or delayed broadcast attacks.

Exploitation Methodology

An attacker can exploit this vulnerability by executing a series of precise on-chain and off-chain steps. First, they construct a valid transaction envelope of type 0x76 containing a legitimate call to a supported contract.

Next, the attacker modifies the transaction's RLP-encoded gas parameters. They set the max_fee_per_gas and max_priority_fee_per_gas to artificially high levels (such as 100 Gwei or even multiple Ether per gas unit), or append a massive, redundant list of addresses to the access_list structure.

When this payload is submitted to the target server's API, the server validates the call destination but ignores the gas parameters. The server then signs the transaction envelope and broadcasts it. Upon inclusion in a block, the network deducts the inflated transaction fees directly from the server's co-signing wallet, resulting in an immediate and irreversible loss of native tokens.

Impact Assessment

The primary impact of this vulnerability is severe financial loss. Because transactions on EVM-compatible public networks are irreversible, funds transferred to block proposers and validators as transaction fees cannot be recovered.

Furthermore, the exploitation path requires no authentication or specific preconditions, representing a low-barrier, high-impact vector. Once the server's wallet balance is depleted below the minimum gas threshold, the service can no longer sponsor legitimate user transactions, leading to a permanent and complete Denial of Service (DoS) for all clients.

The CVSS v4 score is calculated as 8.8 (High) due to the combination of low attack complexity, network accessibility, no required privileges, and high integrity and availability impacts.

Remediation and Guidance

The recommended remediation is to immediately upgrade the mpp dependency in the Elixir application's mix.exs configuration to version 0.6.0 or higher.

# Update your mix.exs dependencies
defp deps do
  [
    {:mpp, "~> 0.6.0"}
  ]
end

If upgrading is not immediately feasible, operators must implement manual validation of the incoming transaction envelopes. Specifically, before passing a client-provided binary to cosign_fee_payer/3, decode the envelope and ensure the gas limit and gas price parameters fall within safe, hardcoded operational limits.

Additionally, implementing rate limiting on the transaction submission endpoints and closely monitoring the native balance of the fee-paying wallet will help reduce the window of exposure and minimize potential financial damages.

Official Patches

ZenHiveFix commit implementing FeePayerPolicy validation

Fix Analysis (1)

Technical Appendix

CVSS Score
8.8/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N

Affected Systems

Systems using mpp Elixir package for Ethereum sponsored/multi-party transactions

Affected Versions Detail

Product
Affected Versions
Fixed Version
mpp
ZenHive
>= 0.2.0, < 0.6.00.6.0
AttributeDetail
CWE IDCWE-20
Attack VectorNetwork
CVSS Score8.8
Exploit Statuspoc
KEV StatusNot listed

MITRE ATT&CK Mapping

T1496Resource Hijacking
Impact
CWE-20
Improper Input Validation

The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and securely.

Vulnerability Timeline

Vulnerability patch commit 5d6338e2334084c5f2a78cfcca474830733ed7e8 merged
2026-06-24
Release v0.6.0 published on hex.pm
2026-06-24
GitHub Security Advisory GHSA-vv77-66rf-pm86 published
2026-09-25

References & Sources

  • [1]GitHub Security Advisory GHSA-vv77-66rf-pm86
  • [2]Vulnerability Repository Security Advisory
  • [3]Release Tag v0.6.0
  • [4]Ecosystem Package Resource on hex.pm

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•22 minutes ago•CVE-2026-100368
8.4

CVE-2026-100368: OS Command Injection in CliInvoke Shell Wrappers

An OS command injection vulnerability exists in the PowerShell and Cmd shell wrappers of the CliInvoke .NET library (specifically the CliInvoke.Specializations package). Under vulnerable configurations, arguments and targets are passed as a single flat string to ProcessStartInfo.Arguments, permitting double-quote breakout and execution of arbitrary secondary commands with host process privileges.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 2 hours ago•GHSA-QPXH-FF8M-C62V
7.5

GHSA-QPXH-FF8M-C62V: Gas Draining and Resource Exhaustion in ZenHive mpp Library

A critical gas draining vulnerability exists in the ZenHive mpp (Multi-Payment Protocol) library prior to version v0.6.0. By omitting validation of EIP-2930 access lists in custom 0x76 transaction envelopes, the library allows malicious clients to pad transaction payloads with dummy addresses, draining the gas sponsor's hot wallet.

Amit Schendel
Amit Schendel
4 views•8 min read
•about 3 hours ago•GHSA-VJ8P-HP9X-GH47
8.8

GHSA-vj8p-hp9x-gh47: Zero-Cost Fee-Payer Wallet Gas Draining in mpp Elixir Library

A high-severity vulnerability exists in the Elixir library `mpp` (Multi-Party Payments) prior to version `0.6.0`. When acting as a sponsored transaction fee payer, the server co-signs and broadcasts user-provided transactions without verifying if the user-specified gas limit is sufficient. An attacker can submit transactions designed to run out of gas and revert. The transaction reversion ensures the attacker pays zero fees, while the sponsor's fee-payer wallet is fully billed for the wasted gas, resulting in a low-cost, high-impact Denial of Service (DoS) vector.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 5 hours ago•CVE-2026-57443
7.5

CVE-2026-57443: Unauthenticated Operations API Information Disclosure in SCBE-AETHERMOORE

An unauthenticated remote information disclosure vulnerability exists in the SCBE-AETHERMOORE geometric AI governance framework. The API endpoint `/api/ops/check-email` allows unauthenticated network actors to trigger administrative subprocesses and retrieve sensitive operator email digests from Gmail or ProtonMail mailboxes due to missing authentication controls and overly permissive CORS configurations.

Alon Barad
Alon Barad
6 views•6 min read
•about 6 hours ago•GHSA-29H2-JR22-FRMH
7.1

GHSA-29H2-JR22-FRMH: Improper Access Control and Handle Substitution in OpenZeppelin Confidential Contracts

A critical access control vulnerability exists in the OpenZeppelin Confidential Contracts library for Fully Homomorphic Encryption (FHE) on EVM networks. Due to missing Access Control List (ACL) verification on encrypted FHE handles returned by untrusted external contracts, malicious actors can perform handle substitution attacks. This allows attackers to harvest unauthorized private FHE handles and leak their underlying plaintext values through logical side-channels in subsequent contract operations.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 7 hours ago•CVE-2026-86439
8.8

CVE-2026-86439: Path Traversal Vulnerability in knowns MCP Document and Memory Storage

A critical path traversal vulnerability (CWE-22) exists in knowns prior to version 0.30.0. The software fails to restrict file path arguments passed to Model Context Protocol (MCP) tools, permitting low-privilege users to escape the designated base storage directories and manipulate arbitrary markdown files on the host filesystem.

Amit Schendel
Amit Schendel
7 views•7 min read