{"id":"CVE-2026-73829","title":"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.\n\nThe type=\"hash\" credential path in MPP.Methods.Tempo.…","summary":"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.\n\nThe type=\"hash\" credential path in MPP.Methods.Tempo.…","severity":"low","cvss":3.7,"cvssVector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N","cwe":["CWE-367"],"vendor":"zenhive","product":"machine_payments_protocol","affected":["machine_payments_protocol >= 0.2.0, < 0.6.1"],"patched":["machine_payments_protocol 0.6.1"],"published":"2026-08-19","updated":"2026-09-10","sourceUpdated":"2026-09-10T18:30:09.270","source":"NVD","sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-73829","references":[{"url":"https://cna.erlef.org/cves/CVE-2026-73829.html","label":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db"},{"url":"https://github.com/ZenHive/mpp/commit/46c5b0e1311da7d92190dc7d9ea89027a1d365e9","label":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db"},{"url":"https://github.com/ZenHive/mpp/security/advisories/GHSA-w8j7-7qc3-5f24","label":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db"},{"url":"https://osv.dev/vulnerability/EEF-CVE-2026-73829","label":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db"}],"tags":["nvd"],"epss":0.00192,"epssPercentile":0.09132,"ingestedAt":"2026-09-10T19:03:26.846Z","slug":"CVE-2026-73829","body":"## Overview\n\nTime-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.\n\nThe 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.\n\nThis issue affects mpp: from 0.2.0 before 0.6.1.\n\n## Affected\n\n- `machine_payments_protocol >= 0.2.0, < 0.6.1`\n\n## Remediation\n\nUpgrade past the affected range:\n\n- `machine_payments_protocol 0.6.1`","depth":"sunlit","depthScore":20,"depthScoreParts":{"impact":20.4,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}