# Retroactive Grant Application - Zebra High and Medium Severity Sync Vulnerabilities (GHSA-jq45-ghw5-v37x, GHSA-3c94-hf7p-g5mf)

**URL:** <https://forum.zcashcommunity.com/t/retroactive-grant-application-zebra-high-and-medium-severity-sync-vulnerabilities-ghsa-jq45-ghw5-v37x-ghsa-3c94-hf7p-g5mf/58749>\
**Category:** Retroactive Grants\
**Created:** [November 2, 2026, 11:24am UTC](https://forum.zcashcommunity.com/t/retroactive-grant-application-zebra-high-and-medium-severity-sync-vulnerabilities-ghsa-jq45-ghw5-v37x-ghsa-3c94-hf7p-g5mf/58749 "2026-11-02T11:24:40Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![ouicate](https://sea2.discourse-cdn.com/zcash/user_avatar/forum.zcashcommunity.com/ouicate/32/49801_2.png) [@ouicate](https://forum.zcashcommunity.com/u/ouicate)\
**Post date:** [November 2, 2026, 11:24am UTC](https://forum.zcashcommunity.com/t/retroactive-grant-application-zebra-high-and-medium-severity-sync-vulnerabilities-ghsa-jq45-ghw5-v37x-ghsa-3c94-hf7p-g5mf/58749/1 "2026-11-02T11:24:40Z")

</div>

Hello Zcash community,

I have submitted a [Q4 retroactive grant application on GitHub (#78)](https://github.com/Financial-Privacy-Foundation/ZcashCoinholderGrantsProgram/issues/78), requesting **$75,000 USD** for two Zebra vulnerabilities that I found and privately reported: **GHSA-jq45 (High)** and **GHSA-3c94 (Medium)**. Both let a single connected peer attack nodes with forged block bodies served under genuine block hashes. Both are fixed in released Zebra.

**Read ZF’s advisories here:** [GHSA-jq45-ghw5-v37x](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-jq45-ghw5-v37x) (High) and [GHSA-3c94-hf7p-g5mf](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-3c94-hf7p-g5mf) (Medium)

## What I found

After NU5, a block’s hash and Merkle root commit only to transaction IDs, and a v5 transaction’s ID doesn’t cover its authorizing data ([ZIP 244](https://zips.z.cash/zip-0244)). A peer can take a real block, flip one authorizing byte, and serve a different body under the same hash. Zebra accepted that body as the answer to its own download request.

- **GHSA-jq45 (High): one peer could hold a syncing node behind the chain tip.** Zebra scored transparent script failures at 0 on the mempool, block-sync and block-gossip paths. With a one-byte `scriptSig` flip, a peer could stall a node’s sync again and again, “never scored, never banned. No funds, keys, proofs or mining are needed.” It affected every Zebra release from 2.3.0 until 7.0.0, and no configuration removed it.

- **GHSA-3c94 (Medium): free proof verification and a stalled sync.** Zebra ran every proof in the forged body, including the Ironwood Halo2 batch, before catching the mismatch, and never penalized the peer. On block sync, each forged body that won its download race also idled the node for 67 seconds.

Both hit hardest at nodes catching up above the checkpoint, such as new nodes and exchanges or explorers coming back from downtime. ZF’s GHSA-3c94 advisory calls that “the most damaging scenario”.

**How I found them:** I followed a downloaded block from the network layer to the state commit, built the same-hash body by hand, and confirmed both findings with tests before reporting them privately. I used LLM-assisted code review to map the code paths and generate leads.

## What the Zcash Foundation did

ZF fixed GHSA-3c94 in [Zebra 6.4.0](https://github.com/ZcashFoundation/zebra/releases/tag/v6.4.0): the syncer now continues the round and re-requests the body from another peer. It fixed GHSA-jq45 in [Zebra 7.0.0](https://github.com/ZcashFoundation/zebra/releases/tag/v7.0.0): peers that send script-invalid transactions or blocks are now banned on all three paths. Both advisories credit my work:

- **GHSA-3c94** (sole reporter): “ouicate, for the finding, the control-flow analysis, and the same-hash construction.”

- **GHSA-jq45** (independent reporter, with @0x15): “Independently reported by @ouicate, who showed the block-sync and block-gossip consequences and the same-hash `scriptSig` construction.”

## Why $75,000

ZF rated these findings High and Medium in its published advisories. I request exactly the Core Node base for each rating from ZCG’s 2026 schedule, with no bonus:

| Advisory | ZF severity | My credit | Requested |
| --- | --- | --- | --- |
| GHSA-jq45-ghw5-v37x | High (CVSS 7.5) | Independent reporter, shared with @0x15 | $37,500 (half of $75,000) |
| GHSA-3c94-hf7p-g5mf | Medium (CVSS 5.3) | Sole reporter | $37,500 |
| **Total** | | | **$75,000** |

- **The shared advisory is split equally.** @0x15 (x15-eth on GitHub) is requesting the other half of GHSA-jq45 in his own application. Coinholders approved the same split for shared advisories in Q3 ([#58](https://github.com/Financial-Privacy-Foundation/ZcashCoinholderGrantsProgram/issues/58)).

- **Nothing has been paid, and there was no bounty route.** ZCG closed its bounty program on 26 May, before both reports.

Thank you to the Zebra team for the fixes and the thorough advisories, and to you for reading. I’m happy to answer questions in this thread.

I’m also applying separately for two Critical Zebra consensus vulnerabilities: [forum thread](https://forum.zcashcommunity.com/t/retroactive-grant-application-two-critical-zebra-consensus-vulnerabilities/58748).

---

<div class="post-metadata">

**Author:** ![0x15](https://sea2.discourse-cdn.com/zcash/user_avatar/forum.zcashcommunity.com/0x15/32/45550_2.png) [@0x15](https://forum.zcashcommunity.com/u/0x15)\
**Post date:** [November 2, 2026, 12:01pm UTC](https://forum.zcashcommunity.com/t/retroactive-grant-application-zebra-high-and-medium-severity-sync-vulnerabilities-ghsa-jq45-ghw5-v37x-ghsa-3c94-hf7p-g5mf/58749/2 "2026-11-02T12:01:03Z")

</div>

Also great work here!

Confirming the split. @ouicate and I share credit on GHSA-jq45, and we’re each requesting half, $37,500, so together it comes to one High base payout. ouicate’s independent report showed the block-sync and block-gossip side of the bug, which ZF’s advisory credits. Supporting this.
