CVE-2026-52735: Zebra script · zebrad has consensus divergence via P2SH sigop undercount in pure-Rust disabled-opcode parser
Affects zebra-scriptSource GCVE Database
Not known to be exploited · CVSS 9.3 Critical : upgrade to 7.0.0 as a priority.
Data as of 30 Oct 2026, 06:59 UTC
- 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:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:HExploitation evidence
Disclosed: evidence found.
CVE published 18 Aug 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponized: no evidence on record.
No public exploit code indexed in Metasploit or Exploit-DB
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by 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-script to 7.0.0; zebrad to 4.5.0.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| crates.iozebra-script | Affected
| Fixed in
|
| crates.iozebrad | Affected
| Fixed in
|
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 in Zebra version 4.4.2 that corrects the P2SH sigop counting by using the C++ FFI method consistent with the legacy sigop counter. There is no configuration-level workaround; all Zebra nodes validating blocks on networks shared with zcashd are affected until upgraded. Operators should upgrade to Zebra 4.4.2 or later as soon as possible to prevent chain splits.
Description
ZEBRA is a Zcash node written entirely in Rust. Prior to 4.5.0, Zebra can accept a block that zcashd rejects because the P2SH signature-operation counter undercounts redeem scripts containing a disabled opcode followed by signature opcodes. In zebra-script/src/lib.rs, p2sh_input_sigop_count used the pure-Rust script::Code::sig_op_count path, whose try_fold parser stops at disabled opcodes such as OP_CODESEPARATOR and returns only the partial count accumulated before the error. The zcashd reference implementation continues static signature-operation counting through disabled opcodes, so an attacker can broadcast P2SH spends that Zebra counts below MAX_BLOCK_SIGOPS while zcashd counts above the 20,000-operation limit. If a Zebra miner includes those transactions, Zebra validators accept the block while zcashd validators reject it, creating a consensus chain split that affects network integrity and availability without requiring the attacker to produce a block. This issue is fixed in version 4.5.0.
References
- github.com/ZcashFoundation/zebra/security/advisories/GHSA-gf9r-m956-97qx (opens in a new tab)
- github.com/AlfredoG87/zcash_script/blob/v0.4.4/src/script/iter.rs (opens in a new tab)
- github.com/ZcashFoundation/zebra (opens in a new tab)
- github.com/ZcashFoundation/zebra/blob/d4cd662c716382f6397d2a730148025a1ca79fec/zebra-consensus/src/block.rs (opens in a new tab)
- github.com/ZcashFoundation/zebra/blob/d4cd662c716382f6397d2a730148025a1ca79fec/zebra-script/src/lib.rs (opens in a new tab)