# Zebra has a Consensus Failure due to Improper Verification of V5 Transactions

Zebra's mempool verification cache keyed on ZIP-244 txid, which excludes V5 auth data, let a malicious miner get invalid-signature transactions accepted into a block, splitting consensus.

- Payout: Research
- Severity: high
- Program: Zebra
- Found by: alchemydc
- Disclosed: 2026-03-30
- CVE: CVE-2026-34377
- Write-up quality: 7/10
- Original: https://github.com/advisories/GHSA-3vmh-33xr-9cqh
- Library page: http://bugbountylibrary.com/r/ghsa%3AGHSA-3vmh-33xr-9cqh
- Tags: area:web3 domain:web3 impact:dos impact:integrity kind:research platform:ghsa sev:high tech:rust technique:source-review vuln:business-logic vuln:crypto

**Target:** Zcash node transaction verification cache (find_verified_unmined_tx in transaction.rs)
**Root cause:** The mempool verification cache used the ZIP-244 txid as its key, but for V5 transactions the txid excludes the Authorization Data Root (signatures and proofs). A cache hit on txid skipped check_v5_auth() for the block's version of the transaction.
**Steps:**
1. Observe a valid V5 transaction broadcast to the network that enters a Zebra node's mempool.
2. Craft a block containing a modified copy of that transaction with the same txid but invalid signatures or proofs.
3. Vulnerable node matches the txid in its mempool cache and assumes the block's transaction is already verified, skipping `check_v5_auth()`.
4. Node commits the block with invalid authorization data; other nodes (zcashd, or Zebra without the tx in mempool) reject it, forking the chain.
**How found:** Code review of the find_verified_unmined_tx optimization: noticing the cache key was the txid, and that ZIP-244 txid deliberately excludes the Authorization Data Root for V5, so a txid hit does not imply auth data was verified.
**Exploitation:** A malicious miner waits for a valid V5 transaction to sit in a victim Zebra node's mempool, then mines a block embedding a same-txid variant with invalid auth data. The victim accepts and commits the block while the rest of the network rejects it, isolating the node on a minority fork usable for double-spends against it.
**Escalation:** Isolated node on a partitioned fork enables double-spend and service disruption against that node's users.
**Insight:** When a cache or dedup key is a hash that deliberately excludes some fields (ZIP-244 txid omits auth data root; similarly txid vs wtxid in Bitcoin), check every consumer that treats a key match as full-object equality — signature/proof checks are the classic casualty.

