Loading...
Skip to main content

CVE-2026-104434 — Vulnerability in zebrad — CVE Details

MEDIUM

zebrad vulnerable to full node denial of service via crafted Sapling receiver in z_listunifiedreceivers

Published July 2, 2026Updated October 3, 2026Source: osv

Summary

### Am I affected You are affected if: 1. You run `zebrad` up to and including `v4.4.1`. 2. Your `zebrad.toml` sets `rpc.listen_addr` to a TCP address (RPC server is enabled). 3. An attacker can authenticate to the RPC endpoint. With the default `enable_cookie_auth = true`, this requires the attacker to read the `.cookie` file (typically local access). With `enable_cookie_auth = false`, any network client reaching the RPC port can trigger it. ### Summary The `z_listunifiedreceivers` RPC handler panics when processing a structurally valid Unified Address whose Sapling receiver carries 43 bytes that fail cryptographic validation (`sapling_crypto::PaymentAddress::from_bytes` returns `None` for non-subgroup Jubjub points). The handler calls `.expect("using data already decoded as valid")` on the fallible result. Because Zebra's release profile sets `panic = "abort"`, the panic terminates the entire node process, not just the RPC task. ### Details `zcash_address::unified::Encoding::decode` validates only the structural envelope of a Unified Address (F4Jumble, bech32m, typecode ordering, 43-byte length for Sapling). It does not validate that the embedded `pk_d` is a valid Jubjub subgroup point or that the diversifier produces a valid `g_d` preimage. At `zebra-rpc/src/methods.rs:2893`, the handler calls `Address::try_from_sapling(network, data)`, which delegates to `sapling_crypto::PaymentAddress::from_bytes`. When `from_bytes` returns `None` (most random 32-byte strings fail the subgroup check), the `.expect()` fires and the process aborts. The same crate already handles this correctly in `try_from_unified` at `zebra-chain/src/primitives/address.rs:99-110`, which returns `Err` when `from_bytes` fails. The vulnerable code path bypasses this validated route. ### Patches zebra-rpc 8.0.0 and zebrad 4.5.0. Replace `.expect()` with `.map_err(|e| ErrorObject::owned(...))` for proper error propagation, or route through the existing `try_from_unified` path which already handles this case correctly. ### Workarounds - Disable the RPC server by removing `rpc.listen_addr` from `zebrad.toml`. - Ensure `enable_cookie_auth = true` (the default) and restrict filesystem access to the `.cookie` file. - Place a reverse proxy in front of the RPC port that rejects `z_listunifiedreceivers` calls with untrusted address parameters. ### Impact A single authenticated RPC request terminates the `zebrad` process. The attack is repeatable on restart (the same request triggers the same abort), allowing an attacker to keep the node down indefinitely until the request is filtered upstream. Operators using `lightwalletd` backends, Zaino indexers, or mining pool infrastructure that forward RPC calls to `zebrad` may be exposed if the forwarding path passes through `z_listunifiedreceivers`. ### Credit Reported by `@robustfengbin` via a private GitHub Security Advisory submission.

Advisory Timeline

  • First published July 2, 2026 (102 days ago).
  • Last revised October 3, 2026 — 92 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Cargo
Update zebrad to 4.5.0 or later
cargo update -p zebrad --precise 4.5.0
Cargo
Update zebra-rpc to 8.0.0 or later
cargo update -p zebra-rpc --precise 8.0.0

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (2)

Affects 1 ecosystem: crates.io (2).

PackageEcosystemAffectedFixed In
zebrad
crates.io
All versions4.5.0
zebra-rpc
crates.io
All versions8.0.0

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 6.5 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

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

Frequently Asked Questions

What is CVE-2026-104434?
zebrad vulnerable to full node denial of service via crafted Sapling receiver in z_listunifiedreceivers This vulnerability has been assigned a severity rating of MEDIUM (CVSS score: 6.5/10).
How do I check if my project is affected by CVE-2026-104434?
CVE-2026-104434 affects zebrad and zebra-rpc. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-104434 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
6.5

Exploitation requires specific conditions or has limited impact. Remediate within weeks.

Also Known As

GHSA-c8w6-x74f-vmg3

Related CVEs

  • CVE-2026-41583
    CRITICAL

    Zebra Vulnerable to Consensus Divergence in Transparent Sighash Hash-Type Handling

  • CVE-2026-104437
    CRITICAL

    Zebra's Transparent SIGHASH_SINGLE Handling Diverges from zcashd for Corresponding Outputs

  • CVE-2026-52735
    CRITICAL

    zebrad has consensus divergence via P2SH sigop undercount in pure-Rust disabled-opcode parser

  • CVE-2026-44497
    CRITICAL

    Zebra has Consensus Divergence in Transparent Sighash Hash-Type Handling due to Stale Buffer

  • CVE-2026-52736
    HIGH

    Zebra has block suppression via NU5 same-header body poisoning of sent-hash cache

  • CVE-2026-52829
    HIGH

    Zebra Address Book Aborted by IPv4-Mapped Mempool Misbehavior Update

  • CVE-2026-41585
    MEDIUM

    Zebra Vulnerable to Denial of Service via Interrupted JSON-RPC Requests from Authenticated Clients

  • CVE-2026-52731
    MEDIUM

    zebrad has full node denial of service via non-ASCII LongPollId in getblocktemplate

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies