Severity by source
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Unauthenticated network submission (PR:N/AV:N), but successful double-receipt depends on specific node/backend behavior (AC:H); impact is a bounded integrity effect (I:L) with no confidentiality or availability loss.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
Lifecycle Timeline
3DescriptionCVE.org
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.
AnalysisAI
Duplicate-submission gate bypass in the Tempo payment method of ZenHive mpp (versions 0.2.0 through 0.16.1) lets an unauthenticated remote client pass the pre-broadcast dedup reservation twice using a single signed transaction - once with recovery id v=27 and once with v=0 - because the reserve key is derived from the caller-supplied raw transaction hex rather than a canonical form of the transaction. The post-broadcast mark then writes the canonical hash key that the raw-keyed reserve never reads, so the two encodings never collide. …
Unlock full vulnerability intelligence
- Risk assessment & exploitation conditions
- Attack chain visualization
- Remediation with exact patch versions
- Threat intelligence from 22 sources
- Personal watchlist & email alerts
Free forever · No credit card required
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata
Vulnerability AssessmentAI
| Exploitation | Requires that the target deploys ZenHive mpp (0.2.0 to before 0.16.2) with the Tempo (MPP.Methods.Tempo) payment method reachable by remote clients, and that the credential replay store is carved out for Tempo (as it is by default in lib/mpp/replay.ex), leaving reserve_hash_atomic/2 as the only dedup gate. … Additional conditions and limiting factors are described in the full assessment. |
| Risk Assessment | This is a genuine but moderate-severity logic flaw, not a critical one, and the multi-source signals agree on that. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in. |
| Exploit Scenario | Full exploit scenario with step-by-step reproduction available after sign-in. |
| Remediation | Vendor-released patch: upgrade to ZenHive mpp 0.16.2 or later, which reworks the Tempo Store dedup semantics and canonical keying (fix references https://github.com/ZenHive/mpp/commit/e12bd4a1cea2e97c2a01fc059c48e5594a7b4a43 and https://github.com/ZenHive/mpp/commit/f8904666061fbab695874856d8fcd02c471dfe1b, alongside advisory https://github.com/ZenHive/mpp/security/advisories/GHSA-8x7x-5j8g-8hcx); depending on how you resolve dependencies, pin the mix dependency to "~> 0.16.2" and confirm the running release reports 0.16.2 via Application.spec/2. … Detailed patch versions, workarounds, and compensating controls in full report. |
Threat intelligence, references, and detailed analysis are available after sign-in.
An authorization bypass in the Ash framework (Elixir) lets authenticated, lower-privileged actors recover values they ar
Uncontrolled recursion between Elixir's charlist inspection path and the error-message rescue clause in List.to_string/1
Denial of service in Elixir's standard library Version module (versions 1.5.0 through 1.20.0) allows any caller passing
Elixir 0.8.0 uses Blowfish in CFB mode without constructing a unique initialization vector (IV), which makes it easier f
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-80256
GHSA-p7v4-jpp9-2m3q