Skip to main content

zebrad CVE-2026-52736

| EUVDEUVD-2026-61171 HIGH
Incomplete Cleanup (CWE-459)
2026-07-02 https://github.com/ZcashFoundation/zebra GHSA-4m69-67m6-prqp
8.7
CVSS 4.0 · Vendor: https://github.com/ZcashFoundation/zebra
Share

Severity by source

Vendor (https://github.com/ZcashFoundation/zebra) PRIMARY
8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/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
vuln.today AI
7.4 HIGH

Race-condition propagation timing warrants AC:H; chain-state divergence maps to I:H and permanent sync disruption to A:H; no confidentiality impact applies.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/ZcashFoundation/zebra).

CVSS VectorVendor: https://github.com/ZcashFoundation/zebra

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

5
Source Code Evidence Fetched
Aug 18, 2026 - 20:32 vuln.today
Analysis Updated
Aug 18, 2026 - 20:32 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Aug 18, 2026 - 20:22 vuln.today
cvss_changed
CVSS changed
Aug 18, 2026 - 20:22 NVD
8.7 (HIGH)
Analysis Generated
Jul 02, 2026 - 20:34 vuln.today

DescriptionCVE.org

Description

Am I affected

You are affected if:

  1. You run any version of zebrad up to and including v4.4.1.
  2. Your node accepts inbound P2P connections (network.listen_addr is set, which is the default).
  3. Your node processes blocks past the checkpoint height (non-finalized state is active).

All default configurations are affected.

Summary

Zebra records a block hash in non_finalized_block_write_sent_hashes when the block is sent to the write task, before contextual validation completes. If validation fails, the hash is not removed. A remote unauthenticated peer can deliver a poisoned block body that shares a header hash with a later valid canonical block. The poisoned body is rejected, but the hash remains cached. When the valid canonical block arrives, Zebra treats it as a duplicate and rejects it. The node cannot advance past that height until restart or a reorg event.

Details

ZIP-244 defines txid_v5 without binding transparent input scriptSig, which lives in auth_digest and is committed to by hashBlockCommitments in the block header. Because merkle_root is computed over txids (not auth digests), and the block hash is computed over the header, an attacker can construct two blocks with identical header hashes but different transaction bodies by mutating the coinbase scriptSig.

The attack flow over P2P:

  1. Attacker observes a new block header (from any peer).
  2. Attacker constructs a poisoned body by flipping a byte of the coinbase scriptSig extra-data section. The block hash is unchanged.
  3. Attacker advertises the block hash via inv to the target node.
  4. Target requests the block via getdata; attacker serves the poisoned body.
  5. Zebra adds the hash to non_finalized_block_write_sent_hashes before validation.
  6. The write task rejects the body at block_commitment_is_valid_for_chain_history (auth_data_root mismatch).
  7. The hash is not removed from non_finalized_block_write_sent_hashes.
  8. When the valid canonical block arrives (from honest peers or RPC), queue_and_commit_to_non_finalized_state sees the hash in the cache and returns KnownBlock::WriteChannel duplicate.
  9. The node is stuck at height N-1.

A secondary variant exists where chain pruning (via MAX_NON_FINALIZED_CHAIN_FORKS) removes a chain from chain_set but leaves its block hashes in non_finalized_block_write_sent_hashes, producing the same lockout for children of the pruned fork.

Patches

Patched in Zebra 4.4.2. The fix removes stale entries from non_finalized_block_write_sent_hashes on every failed non-finalized write path.

Workarounds

There is no complete configuration-level workaround. Reducing the node's inbound peer count (network.peerset_initial_target_size) narrows the attack surface but does not eliminate it. Restarting the node clears the in-memory cache and allows the valid block to be re-fetched.

Impact

A remote unauthenticated P2P peer can permanently stall a targeted Zebra node at a specific block height. The node diverges from the network tip; downstream consumers (lightwalletd, wallets, explorers, mining infrastructure) relying on the node see a stalled chain. The attack requires winning a propagation race: delivering the poisoned block body before honest peers deliver the canonical block. A well-positioned attacker (low-latency connection to the target, observation of new blocks from other peers) can reliably win this race. In sustained form, the attacker repeats for each new block, keeping the target permanently behind.

Recovery requires restarting the node (which clears the in-memory sent-hash cache) or waiting for a reorg at the affected height (rare on the canonical chain).

Credit

Reported independently by @ipwning (primary, with ZIP-244 malleability analysis and zcashd cross-reference) and @x15-eth (first reporter, with E2E reproduction and control experiment).

AnalysisAI

Block suppression via ZIP-244 transaction malleability in zebrad up to v4.4.1 allows a remote unauthenticated P2P peer to permanently stall a target node at a specific block height by poisoning the sent-hash cache with a validation-rejected block whose hash is never cleaned up. The root cause is that non_finalized_block_write_sent_hashes records a block's header hash before contextual validation completes, and on failure the stale entry remains, causing any subsequent delivery of the legitimate canonical block to be discarded as a duplicate. No active exploitation is listed in CISA KEV, but the Zcash Foundation advisory credits two independent researchers with E2E reproduction, confirming the attack is practically executable against all default configurations; vendor-released patch zebrad 4.5.0 is available.

Technical ContextAI

The vulnerability (CWE-459: Incomplete Cleanup) arises from an interaction between Zcash's ZIP-244 transaction-ID scheme and Zebra's non-finalized state write pipeline. ZIP-244 defines txid_v5 without binding the transparent input scriptSig; instead, scriptSig lives in auth_digest, which is committed to by hashBlockCommitments in the block header rather than by merkle_root. Because the block hash is derived from the header alone, an attacker can produce two distinct block bodies sharing an identical header hash simply by mutating bytes in a coinbase scriptSig extra-data field - the merkle_root is unchanged and so is the hash. Zebra's SentHashes cache records the header hash at dispatch time (zebra-state/src/service.rs lines 659-714), before block_commitment_is_valid_for_chain_history performs the auth_data_root check. When that check fails the write task returns an error but the cache entry at lines 797-802 is never purged, meaning every subsequent delivery of the canonical block hits queue_and_commit_to_non_finalized_state returning KnownBlock::WriteChannel. A secondary variant exists: chain pruning via MAX_NON_FINALIZED_CHAIN_FORKS removes a fork from chain_set but leaves its hashes in the cache, producing the same lockout for children of the pruned fork. Affected packages: pkg:rust/zebrad <=4.4.1 and pkg:rust/zebra-state <=6.0.0.

RemediationAI

Upgrade to zebrad v4.5.0 or later (zebra-state 7.0.0), released 2026-05-28, which removes stale entries from non_finalized_block_write_sent_hashes on every failed non-finalized write path; the fix commit is 1440b43ca7df59aca948090d45117557b217a6cd and the release is at https://github.com/ZcashFoundation/zebra/releases/tag/v4.5.0. No complete configuration-level workaround exists. Reducing network.peerset_initial_target_size narrows the inbound peer attack surface but does not eliminate the vulnerability, since a single malicious peer is sufficient. Operators who cannot immediately upgrade should implement a watchdog that compares local block height against a trusted peer or public explorer and triggers a process restart when the node falls behind by more than one or two blocks; restart clears the in-memory SentHashes cache and allows the valid canonical block to be re-fetched, at the cost of brief re-sync downtime at each triggered restart.

CVE-2024-24919 HIGH POC
8.6 May 28

Potentially allowing an attacker to read certain information on Check Point Security Gateways once connected to the inte

CVE-2017-1000083 HIGH POC
7.8 Sep 05

backend/comics/comics-document.c (aka the comic book backend) in GNOME Evince before 3.24.1 allows remote attackers to e

CVE-2026-16232 CRITICAL POC
9.3 Jul 22

Authentication bypass in the Check Point SmartConsole login process lets an unauthenticated remote attacker mint a valid

CVE-2024-3568 CRITICAL POC
9.6 Apr 10

The huggingface/transformers library is vulnerable to arbitrary code execution through deserialization of untrusted data

CVE-2026-24747 HIGH POC
8.8 Jan 27

PyTorch is a Python package that provides tensor computation. [CVSS 8.8 HIGH]

CVE-2022-41604 HIGH POC
8.8 Sep 27

Check Point ZoneAlarm Extreme Security before 15.8.211.19229 allows local users to escalate privileges. Rated high sever

CVE-2026-58659 HIGH POC
8.4 Jul 15

Remote code execution in PyTorch Lightning through 2.6.5 allows an attacker who can get a victim to load a malicious che

CVE-2019-8461 HIGH POC
7.8 Aug 29

Check Point Endpoint Security Initial Client for Windows before version E81.30 tries to load a DLL placed in any PATH lo

CVE-2019-8452 HIGH POC
7.8 Apr 22

A hard-link created from log file archive of Check Point ZoneAlarm up to 15.4.062 or Check Point Endpoint Security clien

CVE-2026-69112 MEDIUM POC
6.9 Aug 10

Path traversal in Hugging Face Accelerate through 1.14.0 exposes two distinct attack outcomes when a user loads a crafte

CVE-2026-68447 HIGH
7.1 Aug 12

Out-of-bounds read in the Linux kernel drm/amdkfd CRIU checkpoint path leaks kernel memory to userspace on systems with

CVE-2013-7350 CRITICAL
10.0 Apr 01

Multiple unspecified vulnerabilities in Check Point Security Gateway 80 R71.x before R71.45 (730159141) and R75.20.x bef

Share

CVE-2026-52736 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy