Description
ZEBRA is a Zcash node written entirely in Rust. Prior to 4.5.0, a natural or attacker-influenced chain fork can leave stale Sapling and Orchard note-commitment subtree roots in Zebra state. In zebra-state/src/service/non_finalized_state/chain.rs, Chain::pop_tip removed a reverted tip block but did not remove subtree entries whose end_height belonged to that block, unlike the cleanup performed by pop_root. When the winning fork later finalized, the abandoned branch's stale subtree data could be written to RocksDB and survive node restarts. The corrupted history can cause z_getsubtreesbyindex consumers such as lightwalletd and light wallets to receive incorrect subtree roots, producing wallet synchronization failures or incorrect wallet state and requiring a full state rebuild for recovery. This issue is fixed in version 4.5.0.
Published: 2026-08-18
Score: 6.5 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Zebra, a Zcash node implemented in Rust, stored Sapling and Orchard subtree roots in a local on‑disk database. The pop_tip routine removed a reverted block from the chain but failed to delete subtree entries whose end height belonged to the removed block, a flaw corresponding to CWE‑459 (Improper Release of Resource) and CWE‑672 (Data or State Manipulation). When a natural or attacker‑influenced fork later finalizes, these stale subtree roots can be written to RocksDB and survive node restarts. Clients that request subtree roots, such as lightwalletd and light wallets, receive incorrect values, causing wallet synchronization failures, corrupted state, and requiring a full state rebuild for recovery.

Affected Systems

The issue exists in all releases of ZcashFoundation Zebra and zebra‑state prior to version 4.5.0. The 4.5.0 release and newer contain a fix that corrects the pop_tip cleanup logic and removes stale subtree entries. Only deployments running pre‑4.5.0 builds are vulnerable.

Risk and Exploitability

The CVSS score of 6.5 signals moderate‑to‑high severity. No EPSS score is available, and the vulnerability is not listed in CISA KEV. The attack vector is an induced or natural chain reorg: an attacker could broadcast conflicting blocks to trigger a fork, or a network reorg could occur spontaneously. Once the stale data is persisted, an affected node can unintentionally deliver corrupted subtree roots to light clients, leading to integrity violations and availability disruption.

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

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update all Zebra nodes to version 4.5.0 or newer; this fixes the improper cleanup (CWE‑459) and prevents stale data manipulation (CWE‑672).
  • Restart the upgraded node or enforce a sync to trigger the new cleanup routine, which removes any remaining stale subtree entries from RocksDB.
  • If the node has already written corrupted data, perform a complete state rebuild to replace the bad subtree roots and restore correct wallet synchronization.

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

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-2gf8-q9rr-jq3h zebrad has persistent on-disk corruption of Sapling/Orchard subtree roots after chain fork via pop_tip
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 natural or attacker-influenced chain fork can leave stale Sapling and Orchard note-commitment subtree roots in Zebra state. In zebra-state/src/service/non_finalized_state/chain.rs, Chain::pop_tip removed a reverted tip block but did not remove subtree entries whose end_height belonged to that block, unlike the cleanup performed by pop_root. When the winning fork later finalized, the abandoned branch's stale subtree data could be written to RocksDB and survive node restarts. The corrupted history can cause z_getsubtreesbyindex consumers such as lightwalletd and light wallets to receive incorrect subtree roots, producing wallet synchronization failures or incorrect wallet state and requiring a full state rebuild for recovery. This issue is fixed in version 4.5.0.
Title ZEBRA: Persistent on-disk corruption of Sapling/Orchard subtree roots after chain fork via pop_tip
Weaknesses CWE-459
CWE-672
References
Metrics cvssV3_1

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


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-18T19:24:44.005Z

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

Link: CVE-2026-52733

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

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

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

Link: CVE-2026-52733

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-18T21:30:04Z

Weaknesses
  • CWE-459

    Incomplete Cleanup

  • CWE-672

    Operation on a Resource after Expiration or Release