Description
ZEBRA is a Zcash node written entirely in Rust. Prior to 4.5.0, a malicious block producer can terminate zebrad by placing the same shielded transaction in a non-finalized parent block and its child. In zebra-state/src/service/non_finalized_state/chain.rs, Chain::push originally inserted the transaction hash into tx_loc_by_hash and asserted uniqueness before updating shielded data and running the duplicate Sprout, Sapling, or Orchard nullifier checks. The repeated transaction therefore reached the transactions must be unique within a single chain assertion before contextual validation could reject it cleanly. Zebra release builds use panic equals abort, so the reachable assertion terminates the entire process; exploitation requires either two consecutive attacker-mined blocks or an attacker-mined child immediately after an honest block includes the attacker's shielded transaction. This issue is fixed in version 4.5.0.
Published: 2026-08-18
Score: 5.9 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

This vulnerability occurs in the Zebra node when identical shielded transactions are submitted in sequential parent and child blocks that are not finalized. The Chain::push function erroneously attempts to record the transaction hash and perform duplicate nullifier checks only after insertion, allowing the same transaction to bypass the uniqueness assertion. Consequently, the subsequent assertion fails, triggering a panic that aborts the process. The effect is a denial‑of‑service that terminates the entire zebrad process, preventing it from serving the network.

Affected Systems

Hosts impacted are those running Zcash Foundation’s Zebra node or its zebra‑state component with any version prior to the 4.5.0 release. The issue was addressed in version 4.5.0, which implements proper transaction uniqueness checks before aborting. This vulnerability does not affect other Zcash clients such as Zcashd.

Risk and Exploitability

The CVSS score of 5.9 indicates moderate severity, and no EPSS value is available. The attack requires that the adversary is able to mine, or otherwise propagate, two consecutive blocks or a child block that contains the duplicate shielded transaction immediately following an honest block. Because the behavior is deterministic and a panic is executed, an attacker only needs to carefully construct the block sequence; no privileged influence of network nodes is required. The vulnerability is not currently listed in the CISA KEV catalog, but an unpatched node can be brought down in a targeted denial‑of‑service attack.

Generated by OpenCVE AI on August 18, 2026 at 20:35 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Zebra and zebra‑state to release v4.5.0 or later.
  • Restart the zebrad service to load the updated binary.
  • Continuously monitor the node’s uptime and error logs to detect any unexpected panics, and maintain a graceful degradation policy to prevent cascading failures.

Generated by OpenCVE AI on August 18, 2026 at 20:35 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-hhm7-qrv5-h4r6 Zebra: Repeated Non-Finalized Shielded Transaction Aborts Zebra Before Duplicate-Nullifier Rejection
History

Tue, 18 Aug 2026 19:30:00 +0000

Type Values Removed Values Added
Description ZEBRA is a Zcash node written entirely in Rust. Prior to 4.5.0, a malicious block producer can terminate zebrad by placing the same shielded transaction in a non-finalized parent block and its child. In zebra-state/src/service/non_finalized_state/chain.rs, Chain::push originally inserted the transaction hash into tx_loc_by_hash and asserted uniqueness before updating shielded data and running the duplicate Sprout, Sapling, or Orchard nullifier checks. The repeated transaction therefore reached the transactions must be unique within a single chain assertion before contextual validation could reject it cleanly. Zebra release builds use panic equals abort, so the reachable assertion terminates the entire process; exploitation requires either two consecutive attacker-mined blocks or an attacker-mined child immediately after an honest block includes the attacker's shielded transaction. This issue is fixed in version 4.5.0.
Title ZEBRA: Repeated Non-Finalized Shielded Transaction Aborts Zebra Before Duplicate-Nullifier Rejection
Weaknesses CWE-248
References
Metrics cvssV3_1

{'score': 5.9, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-18T19:22:19.865Z

Reserved: 2026-06-08T14:00:43.572Z

Link: CVE-2026-52739

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-18T20:17:18.127

Modified: 2026-08-18T20:17:18.127

Link: CVE-2026-52739

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-18T20:45:04Z

Weaknesses