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
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Observe new block header via P2P network
  2. Delivery
    Mutate coinbase scriptSig to produce poisoned same-hash body
  3. Exploit
    Advertise block hash via inv to target node
  4. Install
    Serve poisoned body on target getdata request
  5. C2
    Hash cached in SentHashes before auth_data_root validation
  6. Execute
    Validation fails; stale hash entry not removed
  7. Impact
    Canonical block rejected as KnownBlock duplicate
  8. Step 8
    Node stalled at height N-1

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Incomplete cleanup
Exploitation Conditions

Three conditions must simultaneously hold: (1) the target runs zebrad v4.4.1 or earlier; (2) network.listen_addr is configured, enabling inbound P2P connections - this is the default; (3) the node has advanced past the checkpoint height, activating non-finalized state processing. All default installations satisfy all three. Beyond these, the attacker must win a block-propagation race by delivering the poisoned body before honest peers deliver the canonical block; the advisory states this is reliably achievable with a low-latency connection to the target and the ability to observe new block headers from other peers. Only a single inbound peer slot is required - no authentication, no pre-shared credentials, and no special protocol state. Exploitation is constrained to blocks in the non-finalized window; finalized (checkpointed) blocks are not susceptible. Recovery requires either a node restart (which clears the in-memory cache) or a chain reorg at the affected height (rare on the canonical chain).

Impact

The vendor-assigned CVSS 4.0 score of 8.7 (AV:N/AC:L/AT:N/PR:N/UI:N/VI:H) reflects network reachability, no authentication requirement, and high integrity impact on the node's chain-state view. The race-condition requirement - delivering the poisoned body before honest peers propagate the canonical block - might suggest AT:P, but the advisory notes a well-positioned attacker with low-latency access and block-propagation visibility can reliably win this race, making effective exploitability close to AT:N in practice. No EPSS score was provided in the input data, and the CVE is not listed in CISA KEV, so automated widespread scanning exploitation appears unlikely given zebrad's niche deployment footprint. Nevertheless, even a mid-sized Zcash infrastructure operator in zabrze running the default configuration should treat this as urgent, since a sustained attacker who repeats the attack for each new block can keep the target permanently behind the chain tip - disrupting downstream lightwalletd, wallet, explorer, and mining consumers indefinitely without any authentication. The secondary pruning-fork variant expands the attack surface beyond the primary same-header path. The primary limiting factor is the propagation race, but the advisory confirms this is not a practical barrier for a prepared attacker.

Exploit ScenarioDerived

An attacker with a low-latency P2P connection to a zebrad node monitors Zcash network propagation for new block announcements, immediately constructs a poisoned block body by flipping a byte in the coinbase scriptSig extra-data field (leaving the header hash intact), and advertises the hash via inv before honest peers reach the target. When the target issues getdata, the attacker serves the poisoned body; zebrad caches the hash, rejects the body during auth_data_root validation, and then refuses the legitimate canonical block from honest peers as a known duplicate, stalling the node permanently at height N-1. The attacker can repeat this attack for each subsequent block, maintaining indefinite chain divergence.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – Aug 18, 2026

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.

Earlier versions of this analysis (1)
v1 Jul 02, 2026 - 20:34

Remote denial-of-service in Zebra (zebrad ≤ v4.4.1), the Zcash Foundation's Rust node, lets an unauthenticated P2P peer permanently stall a targeted node at a chosen block height. By exploiting ZIP-244 transaction malleability, an attacker crafts a poisoned block body sharing the same header hash as a valid canonical block; Zebra caches the hash before validation and never evicts it on failure, so the legitimate block is later rejected as a duplicate. This is a real availability threat against default configurations, though there is no public exploit identified at time of analysis and it is not listed in CISA KEV; the flaw was independently reproduced end-to-end by two researchers.

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.

Affected VersionsENISA

zebra < 4.5.0

Affected Packages

cargo zebra-state fix: 7.0.0
cargo zebrad fix: 4.5.0
euvd zebra fix: 4.5.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 3 packages in cargo, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

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.

Know when Checkpoint gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

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
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
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Analysis Updated
Aug 18, 2026 - 20:32 vuln.today
v2 - CVSS changed
CVSS changed
Aug 18, 2026 - 20:22 NVD
8.7 (HIGH)

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).

Executive ViewAI

Why It Matters

Zebrad (Zcash node daemon) versions prior to 4.5.0 contain a critical network-level denial of service vulnerability allowing unauthenticated remote attackers to permanently disable targeted nodes, directly impairing transaction processing capability and Zcash network participation for affected organizations. A single malicious peer can stall a node indefinitely; vendor patch is immediately available.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 63% exploitable
Prevalence
Low
niche Zcash-specific node with limited production deployments
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2014-6271 CRITICAL POC
9.8 Sep 24

GNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which

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-2014-7169 CRITICAL POC
9.8 Sep 25

GNU Bash through 4.3 bash43-025 processes trailing strings after certain malformed function definitions in the values of

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-85102 CRITICAL POC
9.8 Sep 09

Remote code execution in Check Point Quantum Security Gateway arises from improper certificate trust validation during V

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-2026-50751 CRITICAL POC
9.3 Jun 08

Authentication bypass in Check Point Quantum Security Gateway and Spark Firewalls allows unauthenticated remote attacker

CVE-2026-93616 CRITICAL POC
9.8 Sep 22

Unauthenticated attackers who can reach the file-upload interface of Check Point Management Server can combine directory

CVE-2021-3449 MEDIUM
5.9 Mar 25

An OpenSSL TLS server may crash if sent a maliciously crafted renegotiation ClientHello message from a client. Rated med

CVE-2026-85103 CRITICAL POC
9.8 Sep 09

Remote code execution in Check Point Quantum Security Gateway and Quantum Security Management stems from a heap-based bu

CVE-2026-91843 CRITICAL POC
9.8 Sep 16

Unauthenticated remote code execution affects Check Point Quantum Security Management, where a stack-based buffer overfl

CVE-2024-3568 CRITICAL POC
9.6 Apr 10

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

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