Summary
CVE-2026-73136 is an authentication bypass (replay) vulnerability in ZenHive’s mpp library (Elixir implementation of the Machine Payments Protocol, HTTP 402 payment middleware), affecting the Tempo payment method module. When a deployment configures a static memo value for Tempo, the library skips its normal per-challenge attribution binding, allowing an attacker to replay a legitimate, publicly visible blockchain transaction hash to gain unauthorized access to paid resources. The issue is rated HIGH severity (CVSS 8.2).
Technical details
- Root cause: The
Elixir.MPP.Methods.Tempomodule’sverify/2andvalidate_config!/1functions allow a static memo to be configured instead of the default per-challenge memo. With a static memo, verification only checks token, recipient, amount, and the (non-secret) static memo. - Trigger conditions: The vulnerability only manifests when the operator has explicitly configured a static memo in Tempo’s method settings; deployments using the default per-challenge attribution memo are not affected.
- Attack vector: The static memo is echoed verbatim in unauthenticated responses, and Tempo transfers are recorded on a public blockchain. An attacker can pull a historical, legitimate transfer’s transaction hash/memo from a public block explorer, obtain a fresh authentication challenge, and replay the old transaction to satisfy verification without having made a payment themselves.
- Impact: Unauthorized access to paid/gated resources. Without a deduplication store, replay is unlimited; even with a deduplication store (e.g.,
MPP.Tempo.ConCacheStore) configured, the attack degrades to a front-running/race-condition scenario rather than being fully eliminated. - Weakness classification: CWE-294 (Authentication Bypass by Capture-replay) and CWE-345 (Insufficient Verification of Data Authenticity).
Affected software
- Product: mpp (Erlang/Elixir ecosystem package, ZenHive)
- Affected versions: 0.6.1 through 0.6.3
- Fixed version: 0.6.4
- Affected component:
lib/mpp/methods/tempo.ex— only relevant when the Tempo method is configured with a static memo value.
Severity
- CVSS Score: 8.2 (High)
- CVSS v4.0 Vector:
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
Mitigation and recommended actions
- Immediate: Upgrade
mppto version 0.6.4 or later, which restores proper per-challenge attribution binding checks. - If patching is not immediately possible:
- Remove/disable the static memo configuration for the Tempo method so the system reverts to default per-challenge attribution binding (fully mitigates the issue).
- If a static memo must be retained, deploy a deduplication store (e.g.,
MPP.Tempo.ConCacheStore) with a TTL matching the challenge expiry window. This does not fully close the gap but reduces exposure from unlimited replay to a narrow, hash-based race condition window.
- Review logs/transaction history for repeated use of the same transfer memo/hash across multiple authentication challenges, which may indicate exploitation attempts.

