Zcash has come a long way in ten years, and a lot of that progress is owed to the people committed to making the network stronger.
Special thanks to Taylor Hornby. (@earthrise)
————-
Hello Zcash Community!
I have submitted a Q4 retroactive grant application for my responsible disclosure of CVE-2026-104423, a Zebra node vulnerability that could have instantly cut off the wallets, exchanges and miners relying on it from the rest of the network.
At almost no cost, an attacker could stop every reachable Zebra node from syncing with the Zcash blockchain.
The Zcash Foundation published the advisory crediting me as the sole reporter.
The vulnerability I reported
In July I discovered and responsibly disclosed a High severity remote DoS in Zebra version 6.2.0 (“Uncapped shielded verification cost lets peer-pushed V6 transactions stall block verification”); GHSA-2p4c-3q4q-p463
Before Zebra accepts a transaction from another node, it needs to verify it.
Unfortunately, on versions before 6.2.1 it did the expensive verification checks first and left the cheap ones for later (like whether the transaction paid a fee), and because Zebra checks new blocks in the same line as these transactions, real blocks ended up waiting behind them.
What the attack looked like
- An attacker connects to a Zebra node as an ordinary peer, which the advisory notes requires “no authentication or special privileges.”
- They send transactions carrying fake proofs, which can be produced very easily on an ordinary computer without paying any fee.
- The Zebra node does the expensive work of checking every single one of them before it can reject them, and new blocks wait in the same line behind that work.
- The node stops syncing for as long as the attacker keeps sending these fake transactions, and the attacker can do the same to every reachable Zebra node at once.
Since the network now runs on Zebra, the wallets, exchanges and miners relying on those nodes would have stopped seeing new blocks until the attack ended.
Disclosure and fix
I submitted the advisory on July 20 and messaged Pili and Conrado from the Zcash Foundation on the Z3 Signal group, and less than two days later, on July 22, the fix was merged and shipped in Zebra 6.2.1, which now checks fees before proofs and disconnects peers that send invalid ones. The Foundation rated it High and published the advisory on August 17 crediting me as the sole reporter, and CVE-2026-104423 was assigned on October 2. Zakura’s 1.0.3 release notes credit the report as well.
I hope that coinholders rewarding this report encourages more people to look closely at the software Zcash runs on and bring what they find to the teams who can fix it.
How I got to bug-hunting on Zcash
While building on Zcash, I spent a lot of time studying the Zebra node, especially how it takes a transaction from the mempool into a confirmed block, since I wanted to understand what checks Zebra runs on a transaction, and in what order.
While working through it with an LLM, I learned that new blocks and incoming transactions were verified in the same queue, so new blocks could end up waiting behind them.
Suspecting a weakness in this design, I used an LLM-assisted auditing harness to find attack paths around this seam, and it turned out a peer could fill that queue with transactions carrying fake proofs, which is how I discovered the vulnerability
From there I built a complete proof of concept against a live Regtest network to confirm the attack, after which I submitted the advisory to the Zcash Foundation on July 20 with the PoC and vulnerability details
Published proof of responsible disclosure
- Security advisory published by the Zcash Foundation, rated High (CVSS 7.5), crediting me as sole reporter: Uncapped shielded verification cost lets peer-pushed V6 transactions stall block verification · Advisory · ZcashFoundation/zebra · GitHub
- CVE record for the vulnerability: https://www.cve.org/CVERecord?id=CVE-2026-104423
- NIST National Vulnerability Database entry: NVD - Home
- The fix pull requests that neutralized the attack, merged July 22, 2026: fix(consensus): check ZIP-317 before expensive verifications by upbqdn · Pull Request #11053 · ZcashFoundation/zebra · GitHub and fix(consensus): ban peers sending invalid shielded proofs by upbqdn · Pull Request #11054 · ZcashFoundation/zebra · GitHub
- Zebra 6.2.1, the release that shipped the fix: Release Zebra 6.2.1 · ZcashFoundation/zebra · GitHub
- ZF Engineering Update covering the fix in 6.2.1: ZF Engineering Update: 13th July - 26th July 2026
- Zebra 6.3.0 release post thanking me for the report: Zebra 6.3.0 Release - Zcash Foundation
- Zakura 1.0.3 release notes crediting my report: Release: Zakura 1.0.3 — Zakura
Requested Grant Amount (USD)
75,000