Skip to main content
VulnerabilityPublished

CVE-2026-52739: Repeated Non-Finalized Shielded Transaction Aborts Zebra Before Duplicate-Nullifier Rejection

Affects zebra-stateSource GCVE Database

0
Compare
Authoritative record:CVE-2026-52739· Medium 5.9

Not known to be exploited · CVSS 5.9 Medium : upgrade to 7.0.0 when convenient.

Data as of 30 Oct 2026, 06:59 UTC

CVSS 3.1 base score
5.9Medium
How severe the flaw is on the 0–10 CVSS scale.
EPSS
0.5% chance of exploitation in 30 days – higher than 43% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
Patch
Available – fixed in 7.0.0, 4.5.0
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 18 Aug 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponized: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 29 Oct 2026.

What to do

Upgrade zebra-state to 7.0.0; zebrad to 4.5.0.

Affected software

ProductAffectedFixed in
crates.iozebra-stateAffected
  • <7.0.0
Fixed in
  • 7.0.0
crates.iozebradAffected
  • <4.5.0
Fixed in
  • 4.5.0

Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.

AI-suggested

A patch is available and should be applied: upgrade to zebra-state 7.0.0 and zebrad 4.5.0 or later. The patch replaces the assert with a proper validation error to prevent process aborts. There is no configuration-level workaround; all default configurations are affected. Nodes must be restarted if they abort due to this issue until patched.

Description

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.

References

Community reviews

Loading reviews…