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·13 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

•8 minutes ago•CVE-2026-77596
9.6

CVE-2026-77596: Cross-Tenant Authorization Bypass in Kubeflow Pipelines Upload API

CVE-2026-77596 is an authorization bypass vulnerability in the Kubeflow Pipelines API server affecting multi-user deployments prior to version 2.18.0. The HTTP multipart upload handlers prematurely terminate authorization checks and return success when the target namespace parameter is empty or omitted. Because the default configuration allows pipelines without namespaces to function as cluster-wide shared resources, any low-privileged tenant can create shared pipelines or inject arbitrary pipeline versions into existing shared pipelines without undergoing Kubernetes SubjectAccessReview validation. When other tenants execute unpinned recurring runs tracking these shared pipelines, the attacker-supplied workload runs inside the victim tenant's namespace using the victim's service account credentials.

Alon Barad
Alon Barad
0 views•10 min read
•about 1 hour ago•CVE-2026-85737
6.5

CVE-2026-85737: Missing Authorization and Arbitrary File Disclosure in Velocidex Velociraptor sql() VQL Plugin

An authorization bypass vulnerability in Velocidex Velociraptor versions prior to 0.77.2 allows authenticated users with low-privilege query permissions to bypass access controls in the sql() VQL plugin. By supplying crafted MySQL connection strings pointing to an attacker-controlled rogue MySQL server with local-infile enabled, an attacker can read arbitrary files from the Velociraptor server host filesystem with the privileges of the server process.

Alon Barad
Alon Barad
2 views•8 min read
•about 2 hours ago•CVE-2026-97705
7.5

CVE-2026-97705: Unauthenticated Denial of Service in Moleculer TCP Transporter Packet Parser

CVE-2026-97705 (GHSA-h89v-g948-47vp) is a high-severity unauthenticated Denial of Service (DoS) vulnerability affecting the Moleculer microservices framework for Node.js in versions prior to 0.14.36 and 0.15.2. The vulnerability resides in the internal TCP transporter packet parser (`src/transporters/tcp/parser.js`), which decodes the 4-byte packet length field as a signed 32-bit integer using `Buffer.prototype.readInt32BE()`. An unauthenticated attacker with network access to an exposed TCP transporter port can transmit a single malformed packet containing a negative length value or a positive length value less than the 6-byte header size. Due to how Node.js `Buffer.prototype.slice()` processes negative or sub-header offsets, the parser fails to advance the incoming buffer cursor while remaining inside a synchronous `while (packet.length > 0)` loop. Because Node.js relies on a single-threaded event loop, this infinite loop permanently blocks execution, freezing all services and endpoints within the affected process until manual intervention.

Amit Schendel
Amit Schendel
3 views•10 min read
•about 3 hours ago•CVE-2026-108262
6.5

CVE-2026-108262: Arbitrary Host File Overwrite via Tar Symlink Traversal in DDEV

CVE-2026-108262 (GHSA-9hq4-hm3j-jmph) is a path traversal and arbitrary file overwrite vulnerability in the tar archive extraction routine of DDEV versions 1.25.2 and 1.25.3. Resulting from an incomplete fix for CVE-2026-32885, the Untar function in pkg/archive/archive.go validates absolute symbolic link targets by rebasing them against the extraction destination directory, but subsequently creates the symbolic link on disk using the raw, unvalidated absolute path. When subsequent entries in the archive write through the planted symbolic link, the host operating system resolves the link directly to the host filesystem, allowing an attacker to overwrite arbitrary files with the privileges of the user executing DDEV.

Amit Schendel
Amit Schendel
4 views•10 min read
•about 4 hours ago•CVE-2026-119298
4.2

CVE-2026-119298: Overwrite Confirmation Bypass in schollz/croc via Unvalidated Text Artifact Prefix

CVE-2026-119298 (GHSA-x89h-7h96-v88f) is a file overwrite confirmation bypass vulnerability in schollz/croc prior to version 11.5.2. The receive-side file validation logic in src/croc/croc.go improperly exempted any incoming file whose basename began with the prefix 'croc-stdin-' from interactive overwrite prompts and automatic collision renaming, failing to verify if the transfer session was actually an internal text transfer. An unauthenticated remote peer participating in a transfer session can exploit this flaw to silently overwrite, truncate, or replace matching pre-existing files in the receiver's working directory.

Amit Schendel
Amit Schendel
4 views•9 min read
•about 5 hours ago•CVE-2026-88968
7.7

CVE-2026-88968: TOCTOU Race Condition in Claude Code Edit Tool Allows Arbitrary File Overwrite

Claude Code prior to version 2.1.251 contains a Time-of-Check to Time-of-Use (TOCTOU) race condition in its internal file manipulation tools (Edit, Write, Read). Because path validation was performed using string-based pathname and symbolic link resolution without binding to the underlying directory inodes or open file descriptors, a process running concurrently inside the macOS Bash sandbox can atomically replace an in-workspace directory with a symbolic link after validation passes. This causes the unsandboxed main process to follow the symlink and overwrite user-writable files outside the permitted workspace boundary.

Alon Barad
Alon Barad
5 views•9 min read