Skip to main content

Zebra CVE-2026-44497

CRITICAL
Improper Verification of Cryptographic Signature (CWE-347)
2026-05-07 https://github.com/ZcashFoundation/zebra GHSA-gq4h-3grw-2rhv
9.3
CVSS 4.0 · GitHub Advisory
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Craft transaction with chained signature checks
  2. Delivery
    Submit via P2P to Zebra 4.3.1 node
  3. Exploit
    First OP_CHECKSIGVERIFY primes buffer with valid sighash
  4. Install
    Second OP_CHECKSIG triggers invalid hash-type
  5. C2
    Rust callback returns error without clearing buffer
  6. Execute
    C++ verifier reads stale buffer
  7. Impact
    Invalid signature accepted
  8. Step 8
    Consensus divergence from zcashd network

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
Exploitation Conditions

Exploitation requires the attacker to construct a transparent transaction output with a custom Bitcoin Script containing specific opcode sequencing: a valid signature check operation (OP_CHECKSIGVERIFY or OP_CHECKSIG) that succeeds, immediately followed by another signature check operation (OP_CHECKSIG) using an undefined ZIP 244 V5 hash-type byte. The target Zebra node must be running version 4.3.1 specifically, which contains the prior GHSA-8m29-fpq5-89jj fix that introduced the incomplete error handling. The vulnerability exists only at the Rust-to-C++ FFI boundary during transparent transaction verification, so exploitation is limited to transactions with transparent inputs (not shielded Sapling or Orchard transactions). Network-accessible attack vector with no authentication required-any peer can submit crafted transactions via standard P2P protocol. Exploitation does NOT require miner cooperation, special node configuration, or user interaction, but practical impact depends on network topology: since most Zcash miners currently run zcashd, malicious blocks created by Zebra nodes accepting invalid transactions would likely be orphaned, limiting attacker profit from double-spends unless targeting specific Zebra-dependent services.

Impact

This is a critical consensus-layer vulnerability with potential for coordinated network attacks despite no confirmed active exploitation. The vendor rates severity as Critical due to the consensus failure impact class: blockchain consensus vulnerabilities can enable double-spend attacks, miner revenue loss through orphaned blocks on minority chains, and service disruption across the network. Attack complexity is moderate-exploitation requires understanding of Bitcoin Script opcodes, Zcash transaction structure, and the specific OP_CHECKSIGVERIFY-then-OP_CHECKSIG chaining pattern, but the GitHub advisory provides a complete attack blueprint. Real-world risk is currently mitigated by deployment topology: the advisory explicitly notes most Zcash miners run zcashd rather than Zebra, limiting attacker return-on-investment for consensus attacks since minority-chain blocks would be orphaned. However, any infrastructure depending on Zebra for transaction validation (exchanges, payment processors, layer-2 protocols) faces immediate risk of accepting invalid transactions that the broader network rejects. CVSS metrics are not provided, but consensus vulnerabilities typically score CVSS:3.1/AV:N/AC:L/PR:N/UI:N with integrity impact due to network-accessible exploitation without authentication. The technical disclosure is complete with proof-of-concept transaction structure details, lowering the barrier for weaponization. SSVC decision framework indicates this warrants immediate patching: exploitation status is public (PoC available in advisory), automatable (transaction crafting can be scripted), technical impact is total (consensus failure affects all validation outcomes), and mission prevalence is situational (depends on Zebra adoption in critical infrastructure). Patch availability is confirmed with explicit version 4.4.0 fix, making delayed patching indefensible.

Exploit ScenarioDerived

An attacker creates a Zcash transaction spending a transparent output secured by a custom script containing two consecutive signature checks: first an OP_CHECKSIGVERIFY with a valid signature and standard SIGHASH_ALL type, immediately followed by OP_CHECKSIG with an identical signature but an undefined hash-type byte not recognized by ZIP 244. When Zebra processes this transaction, the first opcode executes normally-the Rust callback computes the correct sighash, writes it to the C++ buffer, and signature verification succeeds. The second opcode triggers the callback with the invalid hash type, causing it to return None, but the FFI bridge skips the buffer write. The C++ verifier reads the stale buffer containing the prior valid sighash and verifies the signature against it, accepting the transaction. Meanwhile, zcashd nodes correctly reject the transaction due to the undefined hash type. The attacker broadcasts this transaction to partition the network: Zebra nodes accept it into blocks, zcashd nodes reject those blocks, creating competing chain tips and enabling potential double-spend attacks against services relying on Zebra validation.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – May 07, 2026

Consensus divergence in Zebra 4.3.1 enables blockchain network partitioning through crafted transparent transactions with invalid sighash types. Insufficient error handling at the Rust-to-C++ FFI boundary causes Zebra to incorrectly accept transactions with undefined hash types by reusing stale buffer data from prior valid signature checks, while zcashd correctly rejects these transactions. Attackers can exploit this by chaining OP_CHECKSIGVERIFY with OP_CHECKSIG opcodes using invalid hash types to trigger acceptance on Zebra nodes but rejection on zcashd nodes, creating a consensus split that could enable double-spend attacks. Vendor-released patch: 4.4.0. No public exploit identified at time of analysis, but the technical mechanism is fully disclosed in the GitHub advisory GHSA-gq4h-3grw-2rhv.

RemediationAI

Upgrade to Zebra 4.4.0 or later immediately per vendor advisory. The fix implements a defense-in-depth workaround: when the Rust callback rejects an undefined hash type, it fills the sighash buffer with cryptographically secure random bytes from a per-call CSPRNG instead of leaving it unmodified, ensuring signature verification fails with overwhelming probability even if the error signal is lost at the FFI boundary. This approach avoids breaking changes to the zcash_script crate API. Future releases will implement direct error propagation for a definitive fix. Download fixed version from https://github.com/ZcashFoundation/zebra/releases/tag/v4.4.0. No workarounds exist for this vulnerability-the vendor explicitly states immediate upgrade is the only protection against consensus divergence and potential chain forks. For operators unable to upgrade immediately (not recommended), consider temporarily halting transaction acceptance and operating in read-only monitoring mode until patching is complete, though this does not prevent network-level consensus split if other vulnerable nodes exist. Verify upgrade success by confirming version 4.4.0 or later in node logs. Downstream users of zebra-script library must upgrade to version 6.0.0 to address the underlying vulnerability in the FFI layer.

Affected Packages

cargo zebra-script fix: 6.0.0
cargo zebrad fix: 4.4.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in cargo

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Zebra is an independent Rust implementation of the Zcash protocol that validates blockchain consensus rules. This vulnerability exists at the foreign function interface (FFI) boundary between Zebra's Rust validation logic and inherited Bitcoin Script verification code in C++. During transparent transaction verification, Zebra computes transaction sighashes via Rust callback and passes them to C++ signature validators. The fix for prior vulnerability GHSA-8m29-fpq5-89jj added validation to reject undefined ZIP 244 V5 hash-type bytes by returning None from the Rust callback. However, the FFI bridge only writes to the C++ sighash buffer when the callback returns Some. When None is returned, the buffer remains unchanged with data from previous operations, and the C++ verifier unconditionally reads this stale buffer without detecting the error condition. CWE-347 (Improper Verification of Cryptographic Signature) accurately captures the root cause: the signature verification logic fails to properly handle invalid inputs, leading to acceptance of cryptographically invalid signatures. The consensus rules for Zcash transaction validation require strict hash-type checking per ZIP 244 specification, and deviation from zcashd's behavior creates exploitable network partitioning.

Know when Jwt Attack gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

GitHub Advisory PRIMARY 9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:H/SA:H

Primary rating from GitHub Advisory · only source for this CVE.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
High
Subsequent system: Availability
High

Lifecycle Timeline

2
CVSS changed
May 08, 2026 - 15:22 NVD
9.3 (CRITICAL)
CVE Published
May 07, 2026 - 20:56 nvd
CRITICAL

DescriptionGitHub Advisory

CVE-2026-44497: Consensus Divergence in Transparent Sighash Hash-Type Handling due to Stale Buffer

Summary

The fix for https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-8m29-fpq5-89jj introduced a separate issue due to insuficient error handling of the case where the sighash type is invalid, during sighash computation. Instead of returning an error, the normal flow would resume, and the input sighash buffer would be left untouched. In scenarios where a previous signature validation could leave a valid sighash in the buffer, an invalid hash-type could be incorrectly accepted, which would create a consensus split between Zebra and zcashd nodes.

Severity

Critical - This is a Consensus Vulnerability that could allow a malicious party to induce network partitioning, service disruption, and potential double-spend attacks against affected nodes.

Note that the impact is currently alleviated by the fact that currently most miners run zcashd.

Affected Versions

Zebra 4.3.1.

Description

Verification of transparent transactions inherits the Bitcoin Script verification code in C++, called from Zebra through a foreign function interface (FFI) with a Rust callback that computes the sighash. The fix for https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-8m29-fpq5-89jj added the missing V5 hash-type consensus check on the Rust side, returning None for undefined hash types. However, the FFI bridge only writes to the C++ sighash buffer when the callback returns Some, and the C++ checker reads that buffer unconditionally, so the failure signal is lost.

An attacker could exploit this by:

  • Constructing a transparent output spent by a script that runs a valid OP_CHECKSIGVERIFY immediately before an OP_CHECKSIG with an undefined hash type.
  • The first opcode primes the C++ sighash buffer with a valid digest; the second causes Zebra's callback to return None while the C++ checker verifies the invalid signature against the stale digest.
  • Zebra accepts the spend, zcashd rejects it, creating a consensus split in the network.

Impact

Consensus Failure

  • Attack Vector: Network.
  • Effect: Network partition/consensus split.
  • Scope: Any affected Zebra node, and any miner or template pipeline that relies on Zebra's validation result.

Fixed Versions

This issue is fixed in 4.4.0.

The fixes uses a workaround where the input buffer is filled with random bytes on validation failure, which makes signature validation fail (as expected) with overwhelming probability. This avoids a breaking release of the zcash_script crate. A future release will propagate the error correctly for a direct fix.

Mitigation

Users should upgrade to 4.4.0 or later immediately.

There are no known workarounds for this issue. Immediate upgrade is the only way to ensure the node remains on the correct consensus path and is protected against malicious chain forks.

Credits

Zebra thanks @sangsoo-osec for finding and reporting the issue.

Executive ViewAI

Why It Matters

Zebra 4.3.1 contains a critical consensus vulnerability that allows attackers to partition the Zcash blockchain network by crafting transactions accepted by Zebra but rejected by zcashd, potentially enabling double-spend attacks. Organizations operating Zebra nodes face immediate risk of transactional inconsistency and network divergence, directly threatening the integrity of blockchain operations and financial settlement finality.

Business Impact: Severe
Compensating Controls

Vendor-released patch: 4.4.0. Immediate mitigation: disable Zebra 4.3.1 nodes from accepting or propagating transactions; route all transaction validation through zcashd nodes until upgrade completes. Monitor for consensus divergence via dual-node validation of incoming transactions.

Threat Intelligence Overview

EPSS Score
0.0%
Top 89% exploitable
Threat Intel
1
1 source
Data Quality
4 sources
Confidence: Medium
NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Partial

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Affected Products (CPE)GitHub Advisory

pkg:rust/zebra-script
pkg:rust/zebrad
CVE-2013-3900 MEDIUM
5.5 Dec 11

Why is Microsoft republishing a CVE from 2013? We are republishing CVE-2013-3900 in the Security Update Guide to update

CVE-2026-48558 CRITICAL POC
9.5 Jun 12

Authentication bypass in SimpleHelp 5.5.15 and prior (plus 6.0 pre-release builds) allows remote unauthenticated attacke

CVE-2026-5430 CRITICAL POC
10.0 Aug 06

Authentication bypass in WSO2 API Manager and related components (Universal Gateway, Traffic Manager, API Control Plane,

CVE-2025-59718 CRITICAL
9.8 Dec 09

Authentication bypass in Fortinet FortiOS, FortiProxy, and FortiSwitchManager allows unauthenticated remote attackers to

CVE-2025-25291 CRITICAL POC
9.3 Mar 12

ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS

CVE-2026-47304 CRITICAL POC
9.8 Jul 14

Security feature bypass in Microsoft .NET (shipped via Visual Studio 2022 17.12/17.14 and Visual Studio 2026 18.7) lets

CVE-2025-25292 CRITICAL POC
9.3 Mar 12

ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS

CVE-2022-25898 CRITICAL POC
9.8 Jul 01

The package jsrsasign before 10.5.25 are vulnerable to Improper Verification of Cryptographic Signature when JWS or JWT

CVE-2026-107722 CRITICAL POC
9.8 Oct 08

Authentication and authorization bypass in fast-jwt 6.2.0 through 6.2.4 (npm, NearForm) lets a remote, unauthenticated a

CVE-2024-42004 CRITICAL POC
9.8 Dec 18

A library injection vulnerability exists in Microsoft Teams (work or school) 24046.2813.2770.1094 for macOS. Rated criti

CVE-2024-41145 CRITICAL POC
9.8 Dec 18

A library injection vulnerability exists in the WebView.app helper app of Microsoft Teams (work or school) 24046.2813.27

CVE-2024-41138 CRITICAL POC
9.8 Dec 18

A library injection vulnerability exists in the com.microsoft.teams2.modulehost.app helper app of Microsoft Teams (work

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy