CVE-2026-52739 json
ZEBRA: Repeated Non-Finalized Shielded Transaction Aborts Zebra Before Duplicate-Nullifier Rejection
published 4mo ago modified 2d ago also EUVD-2026-61165 , GHSA-hhm7-qrv5-h4r6
- cvss
- 5.9
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.5%
- EPSS 0.5% chance of exploitation in 30 days, percentile 44%
- public exploits
- 0
- none known
Summary
ZEBRA is a Zcash node written entirely in Rust. Prior to 4.5.0, a malicious block producer can terminate zebrad by placing the same shielded transaction in a non-finalized parent block and its child. In zebra-state/src/service/non_finalized_state/chain.rs, Chain::push originally inserted the transaction hash into tx_loc_by_hash and asserted uniqueness before updating shielded data and running the duplicate Sprout, Sapling, or Orchard nullifier checks. The repeated transaction therefore reached the transactions must be unique within a single chain assertion before contextual validation could reject it cleanly. Zebra release builds use panic equals abort, so the reachable assertion terminates the entire process; exploitation requires either two consecutive attacker-mined blocks or an attacker-mined child immediately after an honest block includes the attacker's shielded transaction. This issue is fixed in version 4.5.0.
Patch / fix
- crates.io zebra-state 7.0.0
- crates.io zebrad 4.5.0
- zfnd zebra 4.5.0
- zfnd zebrad 4.5.0
- zfnd zebra-state 7.0.0
Is CVE-2026-52739 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerCISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 2mo ago
Exploit prediction
0.52% chance of exploitation in the next 30 days, higher than 44% of all scored CVEs (FIRST EPSS, 2026-11-11).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 5.9 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H |
| GitHub | 3.1 | 5.9 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| crates.io | zebra-state | <7.0.0 |
7.0.0 |
| crates.io | zebrad | <4.5.0 |
4.5.0 |
Affected products
- ZcashFoundation zebra
- ZcashFoundation zebra-state
Classification
- Weakness
-
- CWE-248 Uncaught Exception
References
- github.com /ZcashFoundation/zebra/commit/1440b43ca7df59aca948090d45117557b217a6cd
-
github.com
/ZcashFoundation/zebra/security/advisories/GHSA-hhm7-qrv5-h4r6
web
- github.com /ZcashFoundation/zebra/releases/tag/v4.5.0
-
github.com
/ZcashFoundation/zebra
package
-
github.com
/ZcashFoundation/zebra/blob/d4cd662c716382f6397d2a730148025a1ca79fec/Cargo.toml#L304-L305
web
-
github.com
/ZcashFoundation/zebra/blob/d4cd662c716382f6397d2a730148025a1ca79fec/zebra-consensus/src/transaction.rs#L521-L
web
-
github.com
/ZcashFoundation/zebra/blob/d4cd662c716382f6397d2a730148025a1ca79fec/zebra-state/src/service/non_finalized_sta
web
Sources
- CVE List CVE-2026-52739
- GitHub Advisory GHSA-hhm7-qrv5-h4r6
- NVD CVE-2026-52739
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.