Skip to main content

Zebra (zebrad) CVE-2026-52829

| EUVDEUVD-2026-61172 HIGH
Reachable Assertion (CWE-617)
2026-07-02 https://github.com/ZcashFoundation/zebra GHSA-63wg-wjjj-7cp8
7.5
CVSS 3.1 · Vendor: https://github.com/ZcashFoundation/zebra
View

Attack ChainAIDerived

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

  1. Access
    Connect over IPv4 to [::] listener
  2. Delivery
    Complete P2P handshake
  3. Exploit
    Advertise invalid coinbase mempool tx
  4. Execution
    Misbehavior penalty queued with raw mapped address
  5. Persist
    30s batch flush hits address-book assertion
  6. Impact
    Process aborts (node down)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V16 - Security Logging and Error Handling Reachable assertion handling
Exploitation Conditions

Exploitation requires the target zebrad node (≤ v4.4.1) to run on Linux, listen on the default dual-stack [::] listen_addr with net.ipv6.bindv6only=0, and be synced near the chain tip so the mempool is active - all of which are the standard/default production deployment per the advisory. The attacker must reach the node over IPv4 (producing the IPv4-mapped IPv6 socket address), complete a normal P2P handshake (no authentication, funds, mining, RPC access, or special privileges), advertise one invalid mempool transaction such as a coinbase, and then wait ~30 seconds for the misbehavior batch flush. Limiting factors: the bug does not fire on IPv4-only (0.0.0.0) listeners, on hosts with net.ipv6.bindv6only=1, or on nodes not yet synced near tip; it is Linux dual-stack specific.

Impact

The signals are internally consistent and point to a genuine availability risk. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5) accurately captures a network-reachable, no-privilege, no-interaction, high-availability-impact bug with no confidentiality or integrity effect - a pure DoS. The description reinforces low complexity: the required preconditions (Linux dual-stack [::] listener, node synced near tip) are explicitly the default production state, not special configuration, so AC:L is justified. No EPSS score or CISA KEV status was provided, and no public POC is referenced, so widespread automated exploitation is not evidenced; the value of the target (a specific Zcash node) suggests targeted rather than opportunistic abuse. The main caveat is impact scope: this crashes a single node and does not threaten consensus, funds, or data - severity should be read as operational uptime, not compromise. Overall a real patch-worthy priority for anyone running affected nodes, tempered by the niche deployment footprint of Zcash node software.

Exploit ScenarioDerived

An attacker locates a public Zebra node listening on the default [::] address, connects to it over IPv4 to complete a standard P2P handshake, and advertises an invalid mempool transaction such as a coinbase transaction. Roughly 30 seconds later the misbehavior batch flush fires the address-book assertion and the node aborts; the attacker simply reconnects and repeats after each restart to sustain outage. No public POC is referenced, but the advisory spells out every step needed to reproduce it.

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

AnalysisAIv1 – Jul 02, 2026

Remote denial of service in the Zebra Zcash full-node (zebrad) up to and including v4.4.1 lets an unauthenticated peer deterministically crash any synced node running the standard Linux dual-stack configuration. By completing a P2P handshake over IPv4 to a [::] listener and then advertising a single invalid mempool transaction (e.g. a coinbase), the attacker triggers a reachable-assertion panic in the address book after a 30-second batch flush, and panic = "abort" terminates the process. No public exploit has been identified at time of analysis, but the advisory documents the full reproduction path; the crash is repeatable after every restart, enabling persistent downtime.

RemediationAI

Vendor-released patch: upgrade zebrad to 4.5.0 or later, which adds a MetaAddr::new_misbehavior constructor that applies canonical_peer_addr in the misbehavior update path so the stored and change addresses match. If you cannot upgrade immediately, two effective workarounds exist: set listen_addr to an IPv4-only address such as 0.0.0.0:8233, which avoids the IPv4-mapped IPv6 representation entirely (trade-off: the node no longer accepts native IPv6 peers on that socket); or set the kernel parameter net.ipv6.bindv6only=1 on Linux, which stops the dual-stack socket from accepting IPv4 via the IPv6 listener (trade-off: a system-wide change affecting all IPv6 sockets on the host, so IPv4 and IPv6 must be bound separately). Refer to advisory GHSA-63wg-wjjj-7cp8 (https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-63wg-wjjj-7cp8) for the authoritative guidance.

Affected VersionsENISA

zebra < 4.5.0

Affected Packages

cargo zebra-network 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

Zebra is the Zcash Foundation's independent, Rust-based Zcash consensus node; the flaw lives in its peer-to-peer networking layer (zebra-network / zebrad). The root cause is CWE-617 (Reachable Assertion) driven by inconsistent address canonicalization. On Linux with net.ipv6.bindv6only=0 (the distro default), an IPv4 connection accepted by a dual-stack [::] socket is represented internally as an IPv4-mapped IPv6 address such as ::ffff:127.0.0.1:8233. The handshake path stores peers via MetaAddr::new_connected, which calls canonical_peer_addr to collapse the mapped form to plain IPv4 (127.0.0.1:8233). The mempool misbehavior path, however, uses connected_addr.get_transient_addr() and forwards the raw mapped address through MetaAddrChange::UpdateMisbehavior without canonicalizing. When AddressBook::update later applies the batched change, MetaAddrChange::apply_to_meta_addr asserts previous.addr == self.addr() - which fails because the stored entry is plain IPv4 while the change carries the IPv4-mapped IPv6 form.

Know when Canonical 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 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

Remote unauthenticated peer with no user interaction triggers a deterministic crash under default config, so AV:N/AC:L/PR:N/UI:N; impact is availability-only (A:H), no C/I effect, no scope change.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/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
Unchanged
Confidentiality
None
Integrity
None
Availability
High

DescriptionCVE.org

Am I affected

You are affected if:

  1. You run zebrad up to and including v4.4.1.
  2. Your node listens on the default [::] address on a Linux host (the standard deployment configuration - net.ipv6.bindv6only=0 is the default on all common Linux distributions).
  3. Your node is synced near the chain tip (the expected production state for any node participating in the network).

Summary

An address normalization mismatch between the handshake path and the mempool misbehavior path causes a deterministic assertion panic when a peer connects via IPv4 to a dual-stack IPv6 listener and then triggers a mempool misbehavior penalty.

The handshake path canonicalizes IPv4-mapped IPv6 addresses to plain IPv4 when storing the peer in the address book via MetaAddr::new_connected. The mempool misbehavior path forwards the raw transient socket address (IPv4-mapped IPv6 form) when sending MetaAddrChange::UpdateMisbehavior to the address book. The address book looks up the canonical IPv4 entry but then asserts that the previous entry's address matches the change's address. The mismatch between the canonical IPv4 address and the raw IPv4-mapped IPv6 address triggers the assertion, and panic = "abort" terminates the process.

Details

On Linux with net.ipv6.bindv6only=0, an IPv4 connection accepted by a [::] listener is represented internally as an IPv4-mapped IPv6 socket address (e.g., ::ffff:127.0.0.1:8233). Zebra's canonical_peer_addr helper converts these to plain IPv4 (e.g., 127.0.0.1:8233).

The handshake path uses MetaAddr::new_connected, which canonicalizes the address before storing in the address book. However, inbound inventory registration uses connected_addr.get_transient_addr(), preserving the raw IPv4-mapped form. When the mempool later downloads an invalid transaction from this peer and generates a misbehavior penalty, the raw transient address is forwarded through the misbehavior channel to MetaAddrChange::UpdateMisbehavior, which does not canonicalize.

After the 30-second misbehavior batch flush, AddressBook::update retrieves the canonical IPv4 entry but MetaAddrChange::apply_to_meta_addr asserts that previous.addr == self.addr(), which fails because one is IPv4 and the other is IPv4-mapped IPv6.

The attacker needs only to complete a P2P handshake over IPv4 to a dual-stack listener and advertise an invalid mempool transaction (such as a coinbase transaction). The assertion fires after the 30-second misbehavior batch flush.

Patches

Patched in Zebra 4.5.0. The fix canonicalizes the address in the misbehavior update path via a new MetaAddr::new_misbehavior constructor that applies canonical_peer_addr before creating the UpdateMisbehavior change.

Workarounds

Configuring listen_addr to an IPv4-only address (e.g., 0.0.0.0:8233) avoids the IPv4-mapped IPv6 representation and prevents this specific assertion. Alternatively, setting net.ipv6.bindv6only=1 on Linux prevents dual-stack acceptance.

Impact

A remote unauthenticated peer can deterministically crash any synced Zebra node running the default Linux dual-stack configuration with a single invalid mempool transaction advertisement, followed by a 30-second wait. The attack requires no mining capability, no RPC access, no funds, and no special privileges. The crash can be repeated after each restart, causing persistent downtime. Linux dual-stack sockets and mempool activation are the default production state, not special preconditions.

Credit

Reported by @Haxatron.

Executive ViewAI

Why It Matters

Zebra Zcash full-node (zebrad) versions up to v4.4.1 are vulnerable to remote denial of service attacks that persistently crash blockchain nodes through the P2P protocol with only unauthenticated network access required. Organizations operating Zcash infrastructure on affected versions face transaction processing downtime and loss of blockchain consensus participation, with no vendor patch currently available. Defensive measures are required within days.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: restrict P2P peer connections through firewall rules and network segmentation; implement per-peer connection rate limiting and IP reputation filtering; deploy automated node restart and health monitoring; restrict IPv6 address space bindings on P2P listeners; maintain isolated backup nodes or offline staging environment until patched version available.

Threat Intelligence Overview

EPSS Score
0.4%
Top 64% exploitable
Prevalence
Low
independent Zcash node software, niche cryptocurrency deployment footprint
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

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

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-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2016-3714 HIGH POC
8.4 May 05

The (1) EPHEMERAL, (2) HTTPS, (3) MVG, (4) MSL, (5) TEXT, (6) SHOW, (7) WIN, and (8) PLT coders in ImageMagick before 6.

CVE-2017-12617 HIGH POC
8.1 Oct 04

When running Apache Tomcat versions 9.0.0.M1 to 9.0.0, 8.5.0 to 8.5.22, 8.0.0.RC1 to 8.0.46 and 7.0.0 to 7.0.81 with HTT

CVE-2016-8735 CRITICAL POC
9.8 Apr 06

Remote code execution is possible with Apache Tomcat before 6.0.48, 7.x before 7.0.73, 8.x before 8.0.39, 8.5.x before 8

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-2014-0160 HIGH POC
7.5 Apr 07

The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packe

CVE-2016-5195 HIGH POC
7.0 Nov 10

Race condition in mm/gup.c in the Linux kernel 2.x through 4.x before 4.8.3 allows local users to gain privileges by lev

CVE-2013-2423 LOW POC
3.7 Apr 17

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 17 and earlier, and

CVE-2023-4911 HIGH POC
7.8 Oct 03

Local privilege escalation in the GNU C Library (glibc) dynamic loader ld.so allows unprivileged local users on affected

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