Skip to main content

ZenHive mpp CVE-2026-73829

| EUVDEUVD-2026-62591 MEDIUM
Time-of-check Time-of-use (TOCTOU) Race Condition (CWE-367)
2026-08-19 EEF GHSA-vjfr-ffhr-5g8p
6.3
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain valid settled on-chain payment hash
  2. Delivery
    Submit concurrent identical hash-credential requests to Tempo endpoint
  3. Exploit
    All requests pass non-atomic check_hash_unused read
  4. Execution
    eth_getTransactionReceipt verifies payment per request before any write lands
  5. Persist
    Each request receives valid resource-access receipt
  6. Impact
    Single payment redeemed multiple times

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture TOCTOU prevention
Exploitation Conditions

Exploitation requires that a non-nil dedup store be explicitly configured in the mpp deployment - the default nil store is stateless and documented as offering no replay protection, so deployments using the default are unaffected by this specific race (though they already lack any replay defense). The vulnerability is confined to the type='hash' credential path; the type='transaction' path uses the atomic check_and_mark/2 primitive and is not vulnerable. The exploitable race window is as wide as the eth_getTransactionReceipt RPC latency - longer blockchain RPC latency makes exploitation easier. No authentication is required (PR:N per CVSS 4.0 vector). The attacker must possess or be able to observe a valid settled payment hash, which implies either a prior legitimate payment or a hash obtained from transaction monitoring. Exploitation is constrained to mpp versions 0.2.0 through 0.6.0.

Impact

The CVSS 4.0 score of 6.3 is reasonable for the raw mechanics, but the financial impact on services using mpp for payment gating likely exceeds what the VI:L rating conveys - a single payment can unlock arbitrarily many resource grants depending on how quickly an attacker can saturate the race window. AT:P in the CVSS 4.0 vector correctly captures that a dedup store must be configured; the default nil store is stateless and provides no replay protection of any kind (documented), so nil-store deployments are unaffected by this specific race though they are already unprotected. AC:L in CVSS 4.0 reflects that once the configuration condition is met, the timing window is passively wide (bounded by RPC latency) rather than requiring precise millisecond manipulation. No CISA KEV listing exists and no public POC has been identified, so exploitation probability is inferred from description mechanics rather than observed attacks. EPSS data was not supplied in the input. The attack is mechanically straightforward - no authentication, no special tooling, no non-default OS configuration beyond the configured store - making the real-world risk higher than a 6.3 score may suggest for services whose revenue model depends on payment integrity.

Exploit ScenarioDerived

An attacker identifies a service running mpp 0.2.0-0.6.0 with a configured dedup store and obtains or observes a valid confirmed on-chain payment hash (e.g., by making a legitimate small payment). The attacker then fans out two or more concurrent HTTP requests to the Tempo verification endpoint carrying the same hash; all requests pass check_hash_unused/2 before the on-chain RPC completes for any of them, each independently verifies the payment on-chain, and each receives a valid resource-access receipt - granting multiple accesses for the cost of one payment. No authentication, elevated privileges, or specialized tooling beyond a concurrent HTTP client are required.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 19, 2026

Payment-replay protection in ZenHive mpp's Tempo hash-credential path is defeated by a TOCTOU race condition, allowing a single confirmed on-chain payment hash to be redeemed for multiple paid-resource grants. The race window spans an eth_getTransactionReceipt RPC round trip - potentially hundreds of milliseconds - during which concurrent unauthenticated requests all pass the non-atomic read guard before any write completes. Affected deployments run mpp 0.2.0 through 0.6.0 with a dedup store configured; no public exploit has been identified at time of analysis, but the attack requires only a standard concurrent HTTP client and knowledge of a valid settled payment hash.

RemediationAI

Upgrade to mpp 0.6.1 or later, which replaces mark_hash_used/2 with commit_hash_used/2 that routes through the store's atomic check_and_mark/2 primitive when supported, closing the race at commit time rather than at the initial read (patch commit 46c5b0e1311da7d92190dc7d9ea89027a1d365e9; advisory at https://github.com/ZenHive/mpp/security/advisories/GHSA-w8j7-7qc3-5f24). For stores that do not implement check_and_mark/2, the patched code falls back to a best-effort plain put - the early read remains the only non-atomic guard for those stores, so operators should migrate to an atomic-capable store backend to fully close the vulnerability. If an immediate upgrade is not possible, serializing Tempo hash-path requests at the application or reverse-proxy layer using a per-hash mutex or request queue eliminates the race at the cost of increased latency under concurrent load. Disabling the type='hash' credential path entirely and requiring type='transaction' (which already uses atomic semantics) is a more aggressive but effective interim workaround where operationally feasible.

Affected VersionsENISA

mpp f8904666061fbab695874856d8fcd02c471dfe1b <46c5b0e1311da7d92190dc7d9ea89027a1d365e9
mpp 0.2.0 <0.6.1

Affected Packages

euvd mpp fix: 0.6.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

ZenHive mpp is an Elixir/BEAM library implementing the Micropayment Protocol (MPP) for Lightning Network and on-chain cryptocurrency payment gating. The vulnerability is in MPP.Methods.Tempo.verify/2 on the type='hash' credential path (lib/mpp/methods/tempo.ex). The three-step sequence - check_hash_unused/2 (plain read) → eth_getTransactionReceipt (async on-chain RPC) → mark_hash_used/2 (plain write) - is non-atomic, exactly matching CWE-367 (Time-of-Check Time-of-Use Race Condition). The store module already exposes a check_and_mark/2 atomic primitive, and the sibling type='transaction' path already uses it correctly; the hash path did not. The on-chain RPC round trip between check and mark creates a timing window wide enough for concurrent requests to each observe the hash as unused, each verify payment on-chain, and each be issued a receipt before any write lands. Reference implementations in other languages (mpp-rs Store::put_if_absent, mppx Charge.ts markHashUsed) both apply equivalent atomic semantics, confirming the intended design was atomic commit. CPE: cpe:2.3:a:zenhive:mpp:*:*:*:*:*:*:*:*.

Know when Mpp gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (EEF) PRIMARY 6.3 MEDIUM
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
vuln.today AI 3.7 LOW

AV:N as the endpoint is network-reachable; AC:H because a specific non-default dedup store configuration must be present and concurrent timing must align; PR:N confirmed by CVSS 4.0 vector; integrity-only impact.

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

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

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.

Threat Intelligence Overview

EPSS Score
0.2%
Top 85% exploitable
Prevalence
Rare
niche Elixir MPP library, small crypto-payment developer footprint
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Mpp

View all
CVE-2026-82750 HIGH POC
8.3 Sep 06

Missing validation of the EIP-7702 aa_authorization_list field in ZenHive mpp's Tempo payment sponsorship module allows

CVE-2026-82751 HIGH POC
8.3 Sep 06

Gas-cost inflation and unauthorized access key provisioning in ZenHive mpp (versions 0.2.0 through 0.15.x) allows any un

CVE-2026-67581 HIGH
8.7 Aug 19

Replay of settled EVM blockchain transaction hashes against ZenHive mpp versions 0.3.0-0.6.2 allows unauthenticated remo

CVE-2026-73541 HIGH
8.3 Aug 19

Concurrent sponsored-payment flooding in ZenHive mpp (versions 0.2.0 through 0.12.0) allows an unauthenticated remote cl

CVE-2026-59694 HIGH
8.3 Jul 17

Economic resource exhaustion in the ZenHive mpp Elixir library (versions 0.2.0 through 0.5.x) lets an unauthenticated re

CVE-2026-59695 HIGH
8.3 Jul 17

Fee-payer wallet draining in ZenHive mpp (Elixir) 0.2.0-0.5.x lets an unauthenticated remote client empty the sponsor's

CVE-2026-73136 HIGH
8.2 Aug 19

Capture-replay authentication bypass in ZenHive mpp versions 0.6.1-0.6.3 allows unauthenticated network attackers to cla

CVE-2026-59252 HIGH
8.2 Jul 17

Wallet-draining denial of service in ZenHive mpp (Elixir library) versions 0.2.0 through 0.5.x affects deployments confi

CVE-2026-87119 HIGH
8.2 Sep 22

Replay of a captured Tempo subscription credential in ZenHive mpp 0.14.0 through 0.16.1 lets an attacker who already hol

CVE-2026-89420 HIGH
7.1 Sep 22

ZenHive mpp versions 0.14.0 through 0.16.1 fail to charge clients that hold an open payment channel, allowing an authent

CVE-2026-88255 MEDIUM
6.3 Sep 16

Duplicate-submission gate bypass in the Tempo payment method of ZenHive mpp (versions 0.2.0 through 0.16.1) lets an unau

CVE-2026-89186 MEDIUM
6.3 Sep 16

ZenHive mpp (MPP.Plug payment middleware for Elixir/Phoenix) versions 0.1.0 through 0.16.1 can allow a shared HTTP cache

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