---
id: CVE-2026-67581
title: >-
  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 ma…
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 ma…
severity: high
cvss: 7.5
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N'
cwe:
  - CWE-294
vendor: zenhive
product: machine_payments_protocol
affected:
  - 'machine_payments_protocol >= 0.3.0, < 0.6.4'
patched:
  - machine_payments_protocol 0.6.4
published: '2026-08-19'
updated: '2026-09-10'
sourceUpdated: '2026-09-10T18:00:52.630'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-67581'
references:
  - url: 'https://cna.erlef.org/cves/CVE-2026-67581.html'
    label: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db
  - url: >-
      https://github.com/ZenHive/mpp/commit/ecc038088b1cda09ad8a84acc6cc112addb4a68f
    label: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db
  - url: 'https://github.com/ZenHive/mpp/security/advisories/GHSA-vp5h-xh25-44wf'
    label: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db
  - url: 'https://osv.dev/vulnerability/EEF-CVE-2026-67581'
    label: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db
tags:
  - nvd
epss: 0.00595
epssPercentile: 0.462
ingestedAt: '2026-09-10T19:03:26.846Z'
---

## Overview

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.

## Affected

- `machine_payments_protocol >= 0.3.0, < 0.6.4`

## Remediation

Upgrade past the affected range:

- `machine_payments_protocol 0.6.4`
