---
id: "CVE-2026-44498"
page: "https://infrastack.ai/live/CVE-2026-44498"
kind: "vulnerability"
aliases: ["CVE-2026-44498", "GHSA-jv4h-j224-23cc"]
title: "Zebra's Block Validator Undercounts Coinbase and P2SH Sigops"
severity: "critical"
cvss: 9.2
epss: 0.00283
exploited: false
status: "open"
category: "package"
products: [{"name": "zebrad", "fixed": ["4.4.0"], "affected": "< 4.4.0", "ecosystem": "cargo"}, {"name": "zfnd zebrad", "fixed": ["4.4.0"], "affected": "< 4.4.0", "ecosystem": "vendor"}]
ecosystems: ["cargo", "vendor"]
tags: ["cargo", "cwe-682", "package", "self-hosted", "zcash", "zebra"]
not_affected_if: ["not-zcash-node", "zcashd-only"]
published_at: "2026-05-07T20:54:33+00:00"
first_seen_at: "2026-11-13T02:48:39+00:00"
updated_at: "2026-11-13T03:13:22+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-jv4h-j224-23cc", "first_seen_at": "2026-11-13T02:48:39+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-44498", "first_seen_at": "2026-11-13T03:13:22+00:00"}]
exploit_sources: [{"type": "epss", "score": 0.00283, "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-44498"}]
---

# Zebra's Block Validator Undercounts Coinbase and P2SH Sigops

Link for people: https://infrastack.ai/live/CVE-2026-44498 (this .md is for agents)

Zebra's block validator undercounts transparent signature operations against the 20000 block limit, so it accepts blocks that zcashd rejects. A miner can use this to split the network, with Zebra nodes following a chain that zcashd nodes refuse.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- cargo:zebrad affected < 4.4.0 fixed 4.4.0
- vendor:zfnd zebrad affected < 4.4.0 fixed 4.4.0

## How to check

- Check the installed Zebra version with `zebrad --version`; versions below `4.4.0` are affected.
- Confirm whether the node validates blocks as a consensus participant, since the flaw only matters for nodes that accept blocks.

## Fix

- Zebra: upgrade to `4.4.0` or later.

## Timeline

- 2026-11-13T02:48:39+00:00 ghsa https://github.com/advisories/GHSA-jv4h-j224-23cc
- 2026-11-13T03:13:22+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-44498

## Documents

- [advisory] Maintainer's advisory: api.github.com https://api.github.com/repos/ZcashFoundation/zebra/security-advisories/GHSA-jv4h-j224-23cc
- [advisory] Maintainer's advisory: github.com https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-jv4h-j224-23cc
- [fix] Release: github.com https://github.com/ZcashFoundation/zebra/releases/tag/v4.4.0

## From the sources

Zebra's block validator undercounts transparent signature operations against the 20000-sigop block limit (`MAX_BLOCK_SIGOPS`), allowing it to accept blocks that `zcashd` rejects with `bad-blk-sigops`. A miner who produces such a block can split the network: Zebra nodes follow the offending chain while `zcashd` nodes do not.

Two distinct undercounts:

#### A: Coinbase Hidden Legacy Sigops

`zcashd`'s `GetLegacySigOpCount()` includes the coinbase input's `scriptSig`. Zebra's `Sigops` impl skipped the coinbase input entirely, so up to ~98 sigops (the 100-byte coinbase script length cap, less the height prefix) could be hidden inside the coinbase `scriptSig` without being charged against the block limit.

#### B: Aggregate P2SH Sigops.

`zcashd`'s `GetP2SHSigOpCount()` parses each P2SH input's redeem script with `accurate=true` and sums those sigops into the block-wide total via `ConnectBlock`. The check is per-block, not per-transaction, and the limit applies regardless of who mines the offending block — a miner just needs to include enough P2SH-spending transactions whose redeem scripts together exceed 20000 sigops. Zebra computed P2SH sigops only on the mempool-acceptance path (used for ZIP-317 weighting) and never accumulated them during block validation. A block whose aggregate redeem-script sigops exceed 20000 (e.g. 1334 P2SH spends × 15 sigops = 20010) would be accepted by Zebra and rejected by `zcashd`.

### Patches

Fixed in this release:  https://github.com/ZcashFoundation/zebra/releases/tag/v4.4.0.

### Workarounds

None. Operators relying on Zebra for consensus should upgrade.

### Resources

- `MAX_BLOCK_SIGOPS` constant inherited from Bitcoin via the Zcash protocol spec's §7.6 catch-all "Other rules inherited from Bitcoin", tracked for explicit documentation in [zcash/zips#568](https://github.com/zcash/zips/issues/568).
- `zcashd` `GetLegacySigOpCount`: <https://github.com/zcash/zcash/blob/v6.11.0/src/main.cpp#L826-L836>
- `zcashd` `GetP2SHSigOpCount`: <https://github.com/zcash/zcash/blob/v6.11.0/src/main.cpp#L840-L852>
- `zcashd` `ConnectBlock` aggregates per-tx sigops and compares against `MAX_BLOCK_SIGOPS`.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
