CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-29X4-R6JV-FF4W

GHSA-29X4-R6JV-FF4W: Denial of Service via Interrupted JSON-RPC Requests in Zebra zebra-rpc

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 19, 2026·6 min read·14 visits

Executive Summary (TL;DR)

Zebra nodes prior to version 4.3.1 are vulnerable to a persistent DoS attack. Authenticated clients sending partial HTTP requests followed by a TCP RST can trigger an unhandled panic in the RPC middleware.

A Denial of Service (DoS) vulnerability exists in the Zebra Zcash node's JSON-RPC interface. An authenticated attacker can crash the node daemon by abruptly terminating an HTTP request during the payload transmission phase, exploiting unhandled I/O errors in the zebra-rpc crate.

Vulnerability Overview

Zebra is an independent Zcash node implementation written in Rust, designed to validate transactions and maintain the network consensus state. The zebra-rpc crate provides the JSON-RPC interface, allowing node operators and external applications to query node data and submit transactions. This interface utilizes an HTTP middleware stack to process incoming RPC requests, validate authentication, and parse request payloads.

Vulnerability GHSA-29X4-R6JV-FF4W affects the error handling mechanisms within this middleware stack. Specifically, the node fails to gracefully handle sudden connection terminations during the payload read phase. If an authenticated client initiates a request but abruptly closes the TCP connection before transmitting the complete payload, the middleware encounters an unhandled I/O exception.

This unhandled exception triggers a process panic, resulting in an immediate and unrecoverable termination of the Zebra node daemon. Consequently, the vulnerability permits an authenticated attacker to execute a persistent Denial of Service (DoS) attack by repeatedly crashing the node using minimal network bandwidth.

Root Cause Analysis

The root cause of this vulnerability lies in the implementation of the HTTP request body parser within the zebra-rpc crate. When reading the incoming byte stream, the code expects the stream to remain open until the number of bytes specified in the Content-Length header is fully received. The underlying TCP stack passes data to the Rust asynchronous runtime, which accumulates the bytes into a buffer.

If the remote client sends a TCP Reset (RST) packet, the socket enters an error state. The asynchronous read operation then yields an std::io::Error indicating a broken pipe or connection reset by peer. This is an expected failure mode in network programming, as clients routinely disconnect unexpectedly.

In versions prior to 4.3.1, the zebra-rpc code failed to propagate this expected failure state up the call stack correctly. The implementation either utilized an unhandled .unwrap() on the I/O Result or propagated the error to an outer scope that interpreted the I/O failure as a critical application fault. This failure to differentiate between expected network interruptions and fatal application errors directly caused the node panic.

Code Analysis

The remediation of this issue required modifying the HTTP middleware to intercept and safely process std::io::Error variants originating from the body payload stream. The patch ensures that interrupted connections return a handled error state rather than invoking the panic handler. The vulnerable code pattern typically manifests in Rust asynchronous stream processing where the error channel is ignored.

The following block illustrates the conceptual difference between the vulnerable implementation and the patched logic within typical Rust HTTP middleware handling partial streams:

// Vulnerable Implementation Concept
let body_bytes = hyper::body::to_bytes(req.into_body())
    .await
    .expect("Failed to read request body"); // Triggers panic on TCP RST
 
let json_payload: RpcRequest = serde_json::from_slice(&body_bytes)?;

The corrected implementation explicitly matches the Result returned by the stream reader. If an I/O error occurs, the function logs a warning and gracefully terminates the specific request handler without affecting the broader daemon runtime.

// Patched Implementation Concept
let body_bytes = match hyper::body::to_bytes(req.into_body()).await {
    Ok(bytes) => bytes,
    Err(e) => {
        tracing::warn!("Client disconnected during payload transmission: {}", e);
        return Ok(Response::builder()
            .status(StatusCode::BAD_REQUEST)
            .body(Body::empty())
            .unwrap());
    }
};
 
let json_payload: RpcRequest = serde_json::from_slice(&body_bytes)?;

By treating network disconnection as a routine client-side error, the system maintains stability. The middleware correctly responds with an HTTP 400 Bad Request internally, or simply drops the task context, preventing the application-wide crash.

Exploitation

Exploitation of GHSA-29X4-R6JV-FF4W requires the attacker to hold valid authentication credentials for the JSON-RPC interface. By default, Zebra restricts the RPC service to the localhost interface and mandates cookie-based authentication. An attacker must either bypass network isolation or possess local access with the necessary cookie to initiate the attack.

The exploitation sequence begins with the attacker establishing a standard TCP connection to the Zebra RPC port. The attacker transmits a valid HTTP POST request header containing correct authentication tokens and an artificially large Content-Length value. This setup informs the server to allocate resources and wait for the subsequent payload bytes.

Immediately after sending the partial JSON body, the attacker forces a TCP connection closure using a TCP RST packet. Tools like curl (using specific timeout parameters) or custom Python scripts utilizing raw sockets can reliably reproduce this behavior. The server encounters the EOF or RST prior to satisfying the Content-Length requirement, triggering the panic.

Impact Assessment

The impact of this vulnerability is strictly limited to Denial of Service. Because the flaw triggers a memory-safe Rust panic, there is no risk of arbitrary code execution, memory corruption, or information disclosure. The process aborts cleanly, and the operating system reclaims allocated resources.

However, the availability impact on the affected node is complete. A crashed Zebra daemon immediately ceases to validate new blocks, relay transactions, or serve RPC queries to dependent applications. If the node is used as part of a critical infrastructure stack, such as an exchange backend or a block explorer, the surrounding services will experience an outage until the daemon is restarted.

The overall severity is constrained by the authentication requirement and the default local-only binding of the RPC interface. An external attacker scanning the public internet cannot exploit this vulnerability unless the node operator explicitly exposes the RPC port and utilizes weak or default credentials. This mitigates the risk of a widespread, automated attack against the Zcash network topology.

Remediation

The primary remediation for GHSA-29X4-R6JV-FF4W is upgrading the Zebra node daemon to version 4.3.1 or later. The fixed release replaces the brittle error handling in the zebra-rpc crate with robust validation that safely handles interrupted data streams. The upgrade process does not require a resynchronization of the blockchain state.

Node operators must verify their current version using the zebrad --version command. For deployments utilizing containerization, administrators should pull the latest official Docker images tagged v4.3.1 and restart the container instances. Proper testing should be conducted in a staging environment prior to updating production nodes.

If an immediate upgrade is unfeasible, operators must enforce strict network access controls. Administrators should verify that the JSON-RPC interface binds exclusively to 127.0.0.1 and is protected by a host-based firewall. Restricting RPC access to trusted internal IP addresses and automated tooling prevents unauthorized clients from initiating the malicious HTTP requests required for exploitation.

Official Patches

Zcash FoundationSecurity Fix PR #10494
Zcash FoundationZebra Release 4.3.1

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Affected Systems

zebra-rpc cratezebrad node daemon

Affected Versions Detail

Product
Affected Versions
Fixed Version
zebra-rpc
Zcash Foundation
< 4.3.14.3.1
zebrad
Zcash Foundation
< 4.3.14.3.1
AttributeDetail
Advisory IDGHSA-29X4-R6JV-FF4W
CWE ClassCWE-248 (Uncaught Exception)
Attack VectorNetwork
Authentication RequiredYes
Base CVSS Score6.5
Exploit StatusNone
Patched Version4.3.1

MITRE ATT&CK Mapping

T1498Network Denial of Service
Impact
CWE-248
Uncaught Exception

The application fails to catch an exception resulting from an unexpected I/O state during network operations, leading to an unrecoverable process panic.

Vulnerability Timeline

Zebra 4.3.1 released with security patches.
2026-04-17
Vulnerability GHSA-29X4-R6JV-FF4W published to the GitHub Advisory Database.
2026-04-17
Public announcement posted on the Zcash Community Forum.
2026-04-17

References & Sources

  • [1]GitHub Advisory: GHSA-29X4-R6JV-FF4W
  • [2]Zcash Community Announcement
  • [3]OSV Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•14 minutes ago•GHSA-XQ3M-2V4X-88GG
9.8

CVE-2026-41242: Remote Code Execution via Dynamic Code Generation in protobufjs

CVE-2026-41242 is a critical code injection vulnerability in protobufjs. The library compiles custom serialization functions at runtime using the `Function` constructor. Prior to versions 7.5.5 and 8.0.1, dynamic type names were not sanitized, allowing an attacker to inject arbitrary JavaScript via crafted schema definitions, leading to remote code execution.

Amit Schendel
Amit Schendel
1 views•7 min read
•about 2 hours ago•GHSA-63GR-G7JC-V8RG
9.8

GHSA-63GR-G7JC-V8RG: Missing Authentication in AgenticMail MCP HTTP Transport Layer

An architectural flaw in the optional Streamable HTTP transport mode of @agenticmail/mcp allows unauthenticated remote network clients to execute administrative API commands. The server, holding the AGENTICMAIL_MASTER_KEY, functions as a confused deputy, letting attackers run privileged functions like deleting agents and establishing mail relays.

Alon Barad
Alon Barad
3 views•8 min read
•10 days ago•CVE-2026-9354
6.9

CVE-2026-9354: Arbitrary Mass Mention Bypass in NousResearch hermes-agent Slack and Mattermost Adapters

A vulnerability in the Slack and Mattermost platform adapters for NousResearch hermes-agent permits an unauthenticated remote attacker to execute arbitrary mass mentions. By leveraging prompt injection, an attacker can bypass output sanitization logic and trigger workspace-wide notification exhaustion.

Alon Barad
Alon Barad
48 views•6 min read
•11 days ago•CVE-2026-9306
6.3

CVE-2026-9306: Unauthenticated Insecure Direct Object Reference (IDOR) in QuantumNous new-api Midjourney Relay

CVE-2026-9306 is a critical unauthenticated Insecure Direct Object Reference (IDOR) vulnerability located in the QuantumNous new-api application, affecting versions up to and including 0.12.1. The flaw is caused by improper middleware ordering combined with a lack of object-level authorization checks. This allows remote, unauthenticated attackers to retrieve sensitive Midjourney images belonging to other users by supplying a valid task identifier.

Amit Schendel
Amit Schendel
24 views•5 min read
•11 days ago•GHSA-GGXF-37HM-9WQF
6.5

GHSA-GGXF-37HM-9WQF: Session Leakage via Unsafe Challenge Path Parsing in instagrapi

The instagrapi library prior to version 2.6.9 contains an improper input validation vulnerability within its challenge handling mechanism. Maliciously crafted server responses can manipulate the client into forwarding session cookies and credentials to an external attacker-controlled domain.

Amit Schendel
Amit Schendel
27 views•6 min read
•12 days ago•GHSA-QQQM-5547-774X
9.1

GHSA-QQQM-5547-774X: Unauthenticated Path Traversal in FileBrowser Quantum PATCH Handler

GHSA-QQQM-5547-774X is a critical path traversal vulnerability in the FileBrowser Quantum application, specifically within the Go backend package. The vulnerability resides in the HTTP handler responsible for processing bulk file modifications via the public API. Unauthenticated attackers can exploit an order-of-operations flaw in the path sanitization logic to bypass intended directory restrictions. This allows adversaries to arbitrarily read, move, and overwrite files on the underlying filesystem by supplying specially crafted HTTP PATCH requests.

Alon Barad
Alon Barad
18 views•6 min read