Description
Time-of-check Time-of-use (TOCTOU) Race Condition in ZenHive mpp allows an unauthenticated remote client to redeem one confirmed on-chain payment for multiple paid-resource accesses.

The type="hash" credential path in MPP.Methods.Tempo.verify/2 guards against replay with a non-atomic check-then-mark sequence: check_hash_unused/2 reads the dedup store, an eth_getTransactionReceipt round trip verifies the payment on chain, and only then does mark_hash_used/2 write the mark. Concurrent requests carrying the same settled payment hash all pass the read before any of them writes, so each is issued a receipt. The store's atomic check_and_mark/2 primitive is available and used by the type="transaction" path, but the hash path calls plain get and put even when the configured store implements it. Exploitation requires a dedup store to be configured; the default nil store is stateless and documented as offering no replay protection at all.

This issue affects mpp: from 0.2.0 before 0.6.1.
Published: 2026-08-19
Score: 6.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A time‑of‑check time‑of‑use race in ZenHive mpp allows an unauthenticated remote client to redeem a confirmed on‑chain payment more than once. The hash‑credential path performs a non‑atomic check‑then‑mark sequence, permitting several concurrent requests to read the same unused hash before any of them can mark it as used, resulting in repeated receipts. This flaw is a classic example of CWE‑367, where the lack of atomicity leads to unauthorized reuse of a protected action.

Affected Systems

The vulnerability affects ZenHive mpp versions from 0.2.0 up to, but not including, 0.6.1. Users running these versions should verify the deduplication store configuration, as the default nil store provides no replay protection.

Risk and Exploitability

The CVSS score of 6.3 indicates a moderate severity. EPSS is not available, and the flaw is not listed in the CISA KEV catalog, but the exploitation path is straightforward for any remote client that can send concurrent requests to the Tempo endpoint. Successful exploitation requires a functional deduplication store; the default stateless configuration offers no protection, making the risk higher for installations that use it.

Generated by OpenCVE AI on August 20, 2026 at 13:30 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade ZenHive mpp to version 0.6.1 or later, which implements atomic check_and_mark for hash credentials
  • Configure the deduplication store to use a backend that provides atomic check_and_mark operations, such as Redis or another key‑value store that supports transactions
  • If an upgrade is not immediately possible, disable the hash‑credential path or funnel all payment validations through the transaction path, which already employs atomic primitives

Generated by OpenCVE AI on August 20, 2026 at 13:30 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 20 Aug 2026 01:45:00 +0000

Type Values Removed Values Added
First Time appeared Zenhive
Zenhive mpp
Vendors & Products Zenhive
Zenhive mpp

Wed, 19 Aug 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 19 Aug 2026 17:30:00 +0000

Type Values Removed Values Added
Description Time-of-check Time-of-use (TOCTOU) Race Condition in ZenHive mpp allows an unauthenticated remote client to redeem one confirmed on-chain payment for multiple paid-resource accesses. The type="hash" credential path in MPP.Methods.Tempo.verify/2 guards against replay with a non-atomic check-then-mark sequence: check_hash_unused/2 reads the dedup store, an eth_getTransactionReceipt round trip verifies the payment on chain, and only then does mark_hash_used/2 write the mark. Concurrent requests carrying the same settled payment hash all pass the read before any of them writes, so each is issued a receipt. The store's atomic check_and_mark/2 primitive is available and used by the type="transaction" path, but the hash path calls plain get and put even when the configured store implements it. Exploitation requires a dedup store to be configured; the default nil store is stateless and documented as offering no replay protection at all. This issue affects mpp: from 0.2.0 before 0.6.1.
Title Non-atomic hash-credential dedup in mpp Tempo allows replay of a confirmed payment under a concurrent race
First Time appeared Zenhive
Zenhive mpp
Weaknesses CWE-367
CPEs cpe:2.3:a:ZenHive:mpp:*:*:*:*:*:*:*:*
Vendors & Products Zenhive
Zenhive mpp
References
Metrics cvssV4_0

{'score': 6.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-08-19T18:58:33.322Z

Reserved: 2026-08-17T11:15:02.320Z

Link: CVE-2026-73829

cve-icon Vulnrichment

Updated: 2026-08-19T18:57:34.178Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-08-19T18:17:25.800

Modified: 2026-08-20T13:02:12.153

Link: CVE-2026-73829

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-20T13:45:03Z

Weaknesses
  • CWE-367

    Time-of-check Time-of-use (TOCTOU) Race Condition