Description
Improper Validation of Unsafe Equivalence in Input in ZenHive mpp allows an unauthenticated remote client to pass the Tempo duplicate-submission gate twice with one signed transaction.

MPP.Methods.Tempo reserves the pre-broadcast dedup slot on the caller-supplied hex in reserve_hash_atomic/2, keyed through store_key/1 on tx.raw rather than on a canonical form of the transaction. The deserializer stores the caller's hex verbatim and accepts both recovery-id encodings, so one signed transaction submitted once with v=27 and once with v=0 yields two distinct reserve keys, and both pass the reserve and reach the broadcast path. The plug-level credential replay store is deliberately carved out for tempo in lib/mpp/replay.ex, leaving this reserve as the only gate, and the post-broadcast mark writes the canonical hash key that the raw-keyed reserve never reads.

What the duplicate submission yields depends on the node: a nonce-reuse rejection fails closed, while a node that answers with the canonical hash for an already-known transaction returns a second valid Payment-Receipt for a single on-chain payment.

This issue affects mpp: from 0.2.0 before 0.16.2.
Published: 2026-09-16
Score: 6.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Duplicate transaction processing enabling possible double payment receipts
Action: Patch Now
AI Analysis

Impact

The bug arises from an unsafe equivalence validation in ZenHive mpp's Tempo component. The reserve key used to block duplicate submissions is derived from the caller‑supplied hexadecimal representation of the transaction, rather than a canonical hash. Because the deserializer accepts both recovery‑id encodings, the same signed transaction can be encoded with either v=27 or v=0, producing two distinct reserve keys that both pass the reserve check and reach the broadcast path. The result is that an attacker can submit the same transaction twice; on nodes that return the canonical hash for a known transaction, the second submission can succeed and produce a second Payment‑Receipt, effectively creating a double‑spend or an unauthorized payment acknowledgment. On nodes that reject duplicate nonces, the request fails, but the possibility of inconsistent behaviour increases system risk.

Affected Systems

ZenHive mpp, versions 0.2.0 through 0.16.1 inclusive, are impacted. Any deployment that exposes the Tempo endpoint and uses these versions is susceptible.

Risk and Exploitability

The CVSS score of 6.3 classifies the issue as moderate to high severity, and the absence of an EPSS score does not reduce the practical risk. Because the attack requires only an unauthenticated remote client that can craft two differently encoded signatures for the same transaction, it is relatively easy to launch. Although the vulnerability is not yet listed in CISA’s KEV catalogue, the potential for double‑spend attacks means administrators should treat it as a priority. The primary attack vector is a remote network request to the Tempo service.

Generated by OpenCVE AI on September 16, 2026 at 14:02 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade ZenHive mpp to version 0.16.2 or later where the reserve key uses the canonical transaction hash.
  • If immediate upgrade is not possible, disable the Tempo duplicate‑submission gate or configure the node to reject non‑canonical transaction forms before reserving.
  • Monitor transaction logs for duplicate payment receipts or nonce‑reuse rejections and audit for unexpected double confirmations.

Generated by OpenCVE AI on September 16, 2026 at 14:02 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 16 Sep 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

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


Wed, 16 Sep 2026 15:00:00 +0000

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

Wed, 16 Sep 2026 08:30:00 +0000

Type Values Removed Values Added
Description Improper Validation of Unsafe Equivalence in Input in ZenHive mpp allows an unauthenticated remote client to pass the Tempo duplicate-submission gate twice with one signed transaction. MPP.Methods.Tempo reserves the pre-broadcast dedup slot on the caller-supplied hex in reserve_hash_atomic/2, keyed through store_key/1 on tx.raw rather than on a canonical form of the transaction. The deserializer stores the caller's hex verbatim and accepts both recovery-id encodings, so one signed transaction submitted once with v=27 and once with v=0 yields two distinct reserve keys, and both pass the reserve and reach the broadcast path. The plug-level credential replay store is deliberately carved out for tempo in lib/mpp/replay.ex, leaving this reserve as the only gate, and the post-broadcast mark writes the canonical hash key that the raw-keyed reserve never reads. What the duplicate submission yields depends on the node: a nonce-reuse rejection fails closed, while a node that answers with the canonical hash for an already-known transaction returns a second valid Payment-Receipt for a single on-chain payment. This issue affects mpp: from 0.2.0 before 0.16.2.
Title mpp Tempo keys its pre-broadcast dedup reserve on the caller-supplied transaction encoding, so a re-encoded signed transaction reserves a second slot
First Time appeared Zenhive
Zenhive mpp
Weaknesses CWE-1289
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-09-16T14:49:57.782Z

Reserved: 2026-09-11T18:30:01.336Z

Link: CVE-2026-88255

cve-icon Vulnrichment

Updated: 2026-09-16T14:49:54.770Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-09-16T09:17:07.333

Modified: 2026-09-16T20:38:33.883

Link: CVE-2026-88255

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-16T14:45:05Z

Weaknesses
  • CWE-1289

    Improper Validation of Unsafe Equivalence in Input