CVE-2026-104435
Executive Summary
CVE-2026-104435 is a consensus-enforcement flaw in Zebra's zebrad 4.4.0 and zebra-script 6.0.0 implementations. The software fails to enforce a ZIP-244 consensus rule, accepting V5 transparent inputs signed with SIGHASH_SINGLE that lack a corresponding output. A remote, unauthenticated attacker can broadcast crafted V5 transactions with more inputs than outputs. Because Zebra accepts these transactions while zcashd rejects them, the discrepancy can produce a network consensus split (chain fork) on the Zcash network. Impact is rated High for Integrity and Availability (CVSS 7.4), with no public PoC or exploit code currently available.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability is classified as CWE-347 (Improper Verification of Cryptographic Signature). The root cause is a failure to enforce a specific ZIP-244 consensus rule during transaction validation in the zebrad 4.4.0 and zebra-script 6.0.0 codebases.
ZIP-244 defines the transaction digest and signature hashing algorithm for Zcash V5 transactions (NU5). Under the SIGHASH_SINGLE signature hash type, a signature commits to exactly one corresponding output — specifically the output at the same index as the input being signed. A well-formed SIGHASH_SINGLE input must therefore have a corresponding output at its index.
The NVD description states that Zebra "fail[s] to enforce a ZIP-244 consensus rule, accepting V5 transparent inputs signed with SIGHASH_SINGLE that lack a corresponding output." This means Zebra's signature-validation logic in the affected components does not reject a transaction where a transparent input's SIGHASH_SINGLE signature references an output index that does not exist in the transaction's output set — i.e., a transaction with more inputs than outputs.
Consequently, a crafted V5 transaction with more inputs than outputs is accepted by Zebra but rejected by zcashd (the reference implementation), which correctly enforces the rule. This divergence in acceptance behavior between two implementations of the same consensus protocol is the direct precondition for a consensus split: nodes running Zebra accept and may build upon blocks containing the malformed transaction, while zcashd nodes reject them, causing the two node populations to follow divergent chains.
The relevant attack surface is the peer-to-peer transaction relay and block-validation path of the Zcash network. The flaw is remotely triggerable (AV:N), requires no privileges (PR:N) and no user interaction (UI:N). The CVSS vector reflects High attack complexity (AC:H), consistent with the need to craft a transaction that satisfies other validation constraints while exploiting the specific signature-index mismatch, and to have it mined into a block to effect a chain-level split.
No specific function names, class names, file paths, or parameter identifiers are provided in the available NVD description or CNA title; the analysis above is therefore confined to the vulnerability class and the described mechanism. Affected version data is limited to the two product names and versions stated in the description; no OSV package mappings or additional version ranges were provided.
Exploitation Scenarios
No public PoC or exploit code is available. The attack chain below is inferred from the vulnerability class (improper cryptographic signature verification / consensus-rule non-enforcement) and the mechanism stated in the NVD description. No specific function names, endpoints, or parameters are asserted beyond those present in the source description.
Reconnaissance / target identification: An attacker identifies the target network as a Zcash network in which Zebra nodes (
zebrad4.4.0) participate in consensus and validation. The attacker determines that a meaningful portion of the node population runs the affected Zebra version as opposed to zcashd.Triggering the specific flaw class: The attacker constructs a V5 transaction containing more transparent inputs than outputs. One or more transparent inputs are signed with SIGHASH_SINGLE such that the signature commits to an output index without a corresponding output. Against a correctly validating implementation (zcashd), this transaction is rejected because the ZIP-244 consensus rule is enforced. Against the affected Zebra implementation, the signature check does not reject the transaction, because the rule is not enforced.
Payload / execution method (vulnerability-class level): The attacker broadcasts the crafted V5 transaction to the peer-to-peer network. Because the flaw is a validation-logic defect rather than a memory-safety or code-execution issue, "execution" consists of causing the malformed transaction to be accepted and, critically, included in a block by a miner running affected validation software. The attacker's goal is not code execution but divergence in validation outcomes.
Post-exploitation impact: If a block containing the crafted transaction is produced and propagated, Zebra nodes accept the block while zcashd nodes reject it. The two node sets then follow different chains, resulting in a network consensus split. Persistence at the chain level is achieved as long as the divergent acceptance behavior remains unpatched across the two implementations. This can disrupt transaction finality, double-spend protections, and network-wide agreement on state until reconciliation.
Impact Assessment
The CVSS 3.1 vector is CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H, for a base score of 7.4 (High).
- Attack Vector (Network): The flaw is exploitable by broadcasting crafted transactions over the peer-to-peer network; no local access is required.
- Attack Complexity (High): Successful exploitation requires crafting a V5 transaction that both exploits the missing ZIP-244 enforcement and propagates into a mined block; coordinating this against a live network is non-trivial.
- Privileges Required (None): No authentication or node privileges are needed to broadcast transactions.
- User Interaction (None): No user action is required for the malformed transaction to be processed.
- Scope (Unchanged): The impact remains within the affected network/component boundary.
- Confidentiality (None): The flaw does not disclose data.
- Integrity (High): Acceptance of invalid transactions and the resulting chain divergence compromise ledger integrity across the network.
- Availability (High): A consensus split can disrupt network operation and transaction finality.
Blast radius: any Zcash network segment where affected Zebra nodes (zebrad 4.4.0, zebra-script 6.0.0) participate in consensus alongside zcashd nodes. Exchanges, custodial services, miners, and payment processors relying on consistent chain state are exposed to finality and reconciliation risks during a split.
Detection Guidance
Sigma Rule
title: Zebra ZIP-244 SIGHASH_SINGLE Consensus Rule Violation Attempt
id: 8f3c1d92-7a4e-4b21-9c6f-2e5b0a7d4f13
status: experimental
description: Detects validation of V5 Zcash transactions where transparent inputs signed with SIGHASH_SINGLE lack a corresponding output, exploiting CVE-2026-104435 in Zebra zebrad 4.4.0 / zebra-script 6.0.0.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-104435
author: Valters IT Threat Intelligence
date: 2026/01/01
logsource:
product: zebra
service: zebrad
detection:
selection_event:
event_type:
- 'transaction_validation'
- 'block_validation'
selection_reason:
validation_result: 'accepted'
rejection_reason:
- 'none'
- 'sighash_single_missing_output'
selection_shape:
tx_version: 5
transparent_input_count|gt: transparent_output_count
sighash_type: 'SIGHASH_SINGLE'
condition: selection_event and selection_reason and selection_shape
falsepositives:
- Legitimate V5 transactions with equal or fewer inputs than outputs
level: high
tags:
- attack.t1190
- cve.2026.104435
YARA Rule
rule CVE_2026_104435_Zebra_SIGHASH_SINGLE_ZIP244
{
meta:
description = "Detects indicators of the CVE-2026-104435 ZIP-244 consensus rule non-enforcement in Zebra zebrad 4.4.0 / zebra-script 6.0.0 builds"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-104435"
author = "Valters IT Threat Intelligence"
date = "2026-01-01"
severity = "high"
strings:
$ver_zebrad = "zebrad 4.4.0" ascii wide
$ver_script = "zebra-script 6.0.0" ascii wide
$sighash = "SIGHASH_SINGLE" ascii wide
$zip244 = "ZIP-244" ascii wide
$zip244b = "ZIP244" ascii wide
$v5 = "V5" ascii wide
condition:
(uint16(0) == 0x5A4D or uint32(0) == 0x464C457F) and
(
($ver_zebrad and $sighash) or
($ver_script and $sighash) or
($sighash and $zip244 and $v5) or
($sighash and $zip244b and $v5)
)
}
Suricata IDS Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-104435 Zebra Zcash V5 Transaction SIGHASH_SINGLE Missing Output Consensus Bypass Attempt"; flow:established,to_server; content:"|05 00|"; depth:2; content:"|04|"; within:64; threshold:type limit, track by_src, count 1, seconds 60; classtype:attempted-dos; reference:cve,2026-104435; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-104435; sid:2026104435; rev:1;)
Elastic Detection
sequence by host.id with maxspan=10s
[ process where event.type == "start" and process.name : ("zebrad", "zebra-script") and process.args : "4.4.0*" ]
[ file where file.name : ("*.dat", "*.log", "*.txt") and file.path : ("*/zebra/*", "*/zcash/*") and
file.Ext.content : ("SIGHASH_SINGLE", "V5", "ZIP-244", "transparent input") and
string(file.Ext.content) : "more inputs than outputs" ]
Splunk SPL Query
index=zebra sourcetype=zebrad:validation
| search (validation_result="accepted" OR "transaction accepted")
(tx_version=5 OR "V5")
("SIGHASH_SINGLE" OR sighash_type="SIGHASH_SINGLE")
| eval input_out_mismatch = if(transparent_input_count > transparent_output_count, 1, 0)
| where input_out_mismatch=1
| stats count min(_time) as first_seen max(_time) as last_seen values(src) as sources by host txid peer_id
| where count >= 1
| table first_seen last_seen host src txid peer_id count
| sort - first_seen
Wazuh OSSEC Rule
<group name="zebra,zcash,cve-2026-104435,">
<rule id="202610435" level="12">
<decoded_as>json</decoded_as>
<field name="component">zebrad|zebra-script</field>
<field name="tx_version">^5$</field>
<field name="sighash_type">SIGHASH_SINGLE</field>
<field name="transparent_input_count">\.+</field>
<field name="validation_result">accepted</field>
<description>CVE-2026-104435: Zebra accepted a V5 SIGHASH_SINGLE transaction with more transparent inputs than outputs (ZIP-244 rule not enforced - potential consensus split)</description>
<mitre>
<id>T1190</id>
</mitre>
<group>consensus_bypass,cve_2026_104435,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source).
- Immediate mitigations:
- Until a fix is available, treat affected
zebrad4.4.0 /zebra-script6.0.0 deployments as non-conformant with ZIP-244 enforcement. Where operational, run zcashd as the validating reference implementation and/or prevent affected Zebra nodes from participating in consensus-critical block acceptance. - Monitor node logs for accepted V5 transactions where transparent input count exceeds transparent output count and where SIGHASH_SINGLE is used, using the detection content above.
- Coordinate with network operators to watch for chain divergence and be prepared to pause confirmations/deposits during any split.
- If feasible, configure upstream networking so affected nodes do not relay transactions/blocks that would propagate a divergence, and isolate affected nodes from production transaction flows.
- Patch / upgrade steps:
- No vendor patch, CNA-provided fix version, or workaround is currently available. Monitor the Zebra project's advisories and repository for a release that enforces the ZIP-244 SIGHASH_SINGLE rule.
- Once a corrected version is released, upgrade
zebradandzebra-scriptpromptly and re-validate that V5 transactions with more inputs than outputs are rejected. - Reconcile chain state after any observed split once network agreement is restored.
- Long-term hardening:
- Establish cross-implementation consensus testing (differential testing between Zebra and zcashd) to catch rule-enforcement divergences before deployment.
- Pin and continuously monitor node software versions; alert on drift from the supported release set.
- Integrate the detection rules in this report into SOC pipelines and retain transaction-validation telemetry for post-incident forensics.
- Maintain an incident playbook for consensus-split response covering confirmation policy, exchange deposit holds, and rollback/reconciliation procedures.
References
- NVD — CVE-2026-104435: https://nvd.nist.gov/vuln/detail/CVE-2026-104435
- CWE-347 — Improper Verification of Cryptographic Signature: https://cwe.mitre.org/data/definitions/347.html
- ZIP-244 specification (Zcash transaction digest / SIGHASH semantics, Zcash Improvement Proposals): https://zips.z.cash/zip-0244
- Zebra (Zcash node implementation) project advisories and releases: https://github.com/ZcashFoundation/zebra
- MITRE ATT&CK T1190 — Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
Known threat actor campaigns / exploit-in-the-wild: none reported. CISA KEV status: not listed. No public PoC or exploit code is available at the time of writing.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.