{"id":"CVE-2026-88255","summary":"mpp Tempo keys its pre-broadcast dedup reserve on the caller-supplied transaction encoding, so a re-encoded signed transaction reserves a second slot","details":"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.\n\nMPP.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.\n\nWhat 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.\n\nThis issue affects mpp: from 0.2.0 before 0.16.2.","aliases":["EEF-CVE-2026-88255","GHSA-8x7x-5j8g-8hcx"],"modified":"2026-09-18T03:48:32.984582864Z","published":"2026-09-16T08:24:40.446Z","database_specific":{"unresolved_ranges":[{"extracted_events":[{"introduced":"f8904666061fbab695874856d8fcd02c471dfe1b"},{"fixed":"e12bd4a1cea2e97c2a01fc059c48e5594a7b4a43"}],"source":"AFFECTED_FIELD"}],"cna_assigner":"EEF","cwe_ids":["CWE-1289"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/88xxx/CVE-2026-88255.json"},"references":[{"type":"WEB","url":"https://cna.erlef.org/cves/CVE-2026-88255.html"},{"type":"WEB","url":"https://github.com"},{"type":"WEB","url":"https://osv.dev/vulnerability/EEF-CVE-2026-88255"},{"type":"WEB","url":"https://repo.hex.pm"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/88xxx/CVE-2026-88255.json"},{"type":"ADVISORY","url":"https://github.com/ZenHive/mpp/security/advisories/GHSA-8x7x-5j8g-8hcx"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-88255"},{"type":"FIX","url":"https://github.com/ZenHive/mpp/commit/e12bd4a1cea2e97c2a01fc059c48e5594a7b4a43"},{"type":"FIX","url":"https://github.com/ZenHive/mpp/commit/f8904666061fbab695874856d8fcd02c471dfe1b"},{"type":"PACKAGE","url":"https://github.com/ZenHive/mpp"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/zenhive/mpp","events":[{"introduced":"7ca7538f05959a98e0e5e63e4bd949b4f362cf8d"},{"fixed":"3b7e43abf60fa30c40985e4043965ec67791b4dc"},{"fixed":"e12bd4a1cea2e97c2a01fc059c48e5594a7b4a43"},{"fixed":"f8904666061fbab695874856d8fcd02c471dfe1b"}],"database_specific":{"extracted_events":[{"introduced":"0.2.0"},{"fixed":"0.16.2"}],"source":["DESCRIPTION","REFERENCES"]}}],"versions":["v0.16.1","v0.16.0","v0.15.0","v0.14.0","v0.13.0","v0.12.0","v0.11.0","v0.10.0","v0.9.0","v0.8.0","v0.7.0","v0.6.4","v0.6.3","v0.6.1","v0.6.0","v0.5.1","v0.4.0","v0.3.0","v0.2.0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-88255.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"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"}]}