CVE-2026-104432
Executive Summary
CVE-2026-104432 is an improper exceptional-condition check in the Zcash "Zebra" node implementation (versions before 6.3.0), specifically within the ChainSync::obtain_tips routine. A peer responding to a FindBlocks request with only a single next-block hash causes the node to compute a zero-length sync sample, which is then incorrectly treated as a valid close-to-tip indication. As a result, the HTTP /ready endpoint returns 200 OK even though the node is not synchronized to the chain tip. The flaw has a CVSS v3.1 base score of 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L) and is assigned CWE-754 (Improper Check for Unusual or Exceptional Conditions).
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Zebra is a consensus-compatible Zcash node written in Rust. Its chain synchronization logic issues FindBlocks requests to peers in order to discover block hashes the node does not yet have, and obtain_tips is part of the code path that evaluates peer tip responses to determine how far the node is from the network tip.
The vulnerability is an improper exceptional-condition check (CWE-754). According to the NVD description, when a peer returns only the next block hash in response to a FindBlocks request, obtain_tips fails to correctly handle this truncated response. Instead of recognizing that only one hash was returned and that this is insufficient to establish tip proximity, the code discards the response as a "valid one-hash FindBlocks response" and proceeds to construct a zero-length sync sample. A zero-length sample is then interpreted as an indicator that the node is close to the tip.
The observable consequence is that the /ready health endpoint returns 200 OK while the node remains behind the network tip. This is a state-reporting integrity failure rather than a memory-safety or code-execution flaw: the node continues to run, but its self-reported readiness does not reflect its actual synchronization state. No patch evidence is available from tracked sources (patch confidence 0/4), and no CVE identifier is present in CISA KEV.
The root cause class — treating a degenerate/empty data set as a valid success condition instead of an exceptional case — is a common logic error in synchronization and health-check code. The specific trigger is network-facing: any connected peer can influence the node's own tip assessment by controlling the shape of its FindBlocks response.
Exploitation Scenarios
Preconditions: The Zebra node must be running a version before 6.3.0, must have at least one connected peer or accept inbound peer connections, and must expose the /ready endpoint (typically to a monitoring system, load balancer, or orchestrator). The attacker must be able to act as, or influence, a peer that responds to FindBlocks requests.
Reconnaissance / target identification: The attacker identifies Zebra nodes by fingerprinting the P2P service and, where exposed, the HTTP
/readyendpoint. Nodes that return200 OKfrom/readyare normally treated by operators as fully synced; this assumption is what the flaw subverts.Triggering the flaw: The attacker (or a misbehaving/malicious peer) responds to the node's
FindBlocksrequest with a payload containing only the next block hash. This is the exceptional condition the vulnerableobtain_tipscode fails to handle correctly. Because the response is misclassified, a zero-length sync sample is produced rather than an indication that more data is required.Effect on node state: The zero-length sample is interpreted as "close to tip." No payload execution or memory corruption is involved — this is a logic/state-manipulation attack. The node's
/readyendpoint subsequently returns200 OKwhile the node is in fact behind the tip.Post-exploitation impact: The attacker can keep a node in a falsely "ready" state. In deployments where
/readygates traffic routing, service registration, or operational alerting, the node may be treated as healthy and authoritative when it is not, causing stale or divergent chain views to be served to downstream consumers. This is a limited-availability/integrity-of-signal impact (CVSS A:L; no confidentiality or integrity impact in the CVSS vector).
Note: No public PoC is available; the attack chain above is inferred from the vulnerability class described in NVD and does not rely on any specific undocumented function or endpoint beyond those named in the description (ChainSync::obtain_tips, FindBlocks, /ready).
Impact Assessment
The CVSS v3.1 vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L (base 5.3, Medium):
- Attack Vector: Network — the trigger arrives via peer responses.
- Attack Complexity: Low — no special conditions beyond controlling a peer response.
- Privileges Required: None.
- User Interaction: None.
- Scope: Unchanged — impact is confined to the affected node's own state reporting.
- Confidentiality: None. Integrity: None. Availability: Low.
Business impact centers on operational trust: monitoring, orchestration, and health-check-driven routing rely on /ready accurately reflecting synchronization. A node falsely reporting readiness may be placed into service while behind the tip, degrading service quality and potentially serving stale chain data to dependent applications. Blast radius is per-node and per-deployment; there is no remote code execution, no key compromise, and no direct fund-loss vector described. Nodes exposed only on a private network with trusted peers have a reduced attack surface, though a single misbehaving peer is sufficient to trigger the condition.
Detection Guidance
Sigma Rule
title: Zebra Node Falsely Reporting Ready via Truncated FindBlocks Response
id: 3f7c9a1e-2b64-4e0d-9c11-7a5e6d8f0b21
status: experimental
description: Detects Zebra /ready endpoint returning 200 while node is behind tip, consistent with CVE-2026-104432
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-104432
author: valtersit.com
date: 2026-01-01
logsource:
category: webserver
product: zebra
detection:
selection:
cs-method: 'GET'
cs-uri-stem|endswith: '/ready'
sc-status: 200
filter:
sc-bytes|gt: 0
condition: selection
falsepositives:
- Healthy nodes that are genuinely at tip
level: low
YARA Rule
rule CVE_2026_104432_Zebra_ChainSync_ObtainTips
{
meta:
description = "Detects Zebra binaries predating 6.3.0 referencing ChainSync obtain_tips logic"
author = "valtersit.com"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-104432"
date = "2026-01-01"
strings:
$obtain_tips = "obtain_tips" ascii
$findblocks = "FindBlocks" ascii
$chainsync = "ChainSync" ascii
$ready = "/ready" ascii
condition:
uint32(0) == 0x464c457f and
(2 of ($obtain_tips, $findblocks, $chainsync, $ready))
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-104432 Zebra /ready falsely reports synced state"; flow:to_server,established; http.method; content:"GET"; http.uri; content:"/ready"; http.stat_code; content:"200"; threshold:type limit, track by_src, count 5, seconds 60; classtype:policy-violation; sid:2026104432; rev:1;)
Elastic Detection
sequence by host.id with maxspan=1m
[ network where network.protocol == "http" and http.request.method == "GET" and url.path == "/ready" and http.response.status_code == 200 ]
[ process where process.name == "zebra" and process.args : "*behind*" ]
Splunk SPL Query
index=proxy OR index=web
| search uri_path="/ready" status=200
| stats count by src_ip, host
| where count > 0
| sort - count
Wazuh OSSEC Rule
<group name="zebra,cve-2026-104432,">
<rule id="104432" level="6">
<decoded_as>json</decoded_as>
<field name="url.path">/ready</field>
<field name="http.response.status_code">200</field>
<description>CVE-2026-104432: Zebra /ready returned 200; verify actual chain sync state</description>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source).
Immediate mitigations:
- Do not rely solely on the
/readyendpoint as a synchronization-authoritative signal. Augment readiness checks with an independent tip-comparison metric (e.g., local block height versus observed network height) before routing traffic or registering the node as healthy. - Restrict peer connectivity to trusted, vetted peers where operationally feasible, reducing exposure to adversarial or malformed
FindBlocksresponses. - Alert on nodes that report
/ready= 200 while lagging in block height.
- Do not rely solely on the
Patch/upgrade steps:
- Upgrade Zebra to version 6.3.0 or later, which per the NVD description addresses the improper exceptional-condition check in
ChainSync::obtain_tips. - Verify the upgrade by confirming
/readyaccuracy against block-height telemetry after deployment. - No vendor fix or workaround is listed for versions below 6.3.0; treat all pre-6.3.0 nodes as affected.
- Upgrade Zebra to version 6.3.0 or later, which per the NVD description addresses the improper exceptional-condition check in
Long-term hardening:
- Treat health/readiness endpoints as security-relevant signals; validate their outputs against ground-truth state rather than trusting a single status code.
- Fuzz and unit-test peer-response handling for degenerate inputs (empty, truncated, single-element responses).
- Monitor upstream Zebra advisories and re-evaluate when patch confidence increases.
References
- NVD — CVE-2026-104432: https://nvd.nist.gov/vuln/detail/CVE-2026-104432
- CWE-754: Improper Check for Unusual or Exceptional Conditions: https://cwe.mitre.org/data/definitions/754.html
- CVSS v3.1 Specification: https://www.first.org/cvss/v3.1/specification-document
- Zebra project repository and release notes (consult upstream for the 6.3.0 changelog)
- CISA Known Exploited Vulnerabilities Catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog (CVE-2026-104432 not listed at time of writing)
No public exploit code, PoC, or Nuclei template is known for this CVE at the time of writing. No threat actor campaign or in-the-wild exploitation evidence is available. EPSS has not yet been scored by FIRST.org.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.