Podatność w węźle Zcash ZEBRA (napisanym w Rust) powoduje brak walidacji reguły konsensusu dotyczącej typów sighash hash dla transakcji V5 oraz błędne użycie 'kanonicznego' typu hash dla transakcji V4. Skutkuje to możliwością rozbicia konsensusu między węzłami Zebra a węzłami zcashd, co zagraża integralności sieci blockchain.
▸ Pokaż oryginał (EN)
ZEBRA is a Zcash node written entirely in Rust. Prior to zebrad version 4.3.1 and prior to zebra-script version 5.0.2, after a refactoring, Zebra failed to validate a consensus rule that restricted the possible values of sighash hash types for V5 transactions which were enabled in the NU5 network upgrade. Zebra nodes could thus accept and eventually mine a block that would be considered invalid by zcashd nodes, creating a consensus split between Zebra and zcashd nodes. In a similar vein, for V4 transactions, Zebra mistakenly used the "canonical" hash type when computing the sighash while zcashd (correctly per the spec) uses the raw value, which could also crate a consensus split. This issue has been patched in zebrad version 4.3.1 and zebra-script version 5.0.2.
Po przeprowadzonym refaktoringu, węzły Zebra przestały weryfikować regułę konsensusu ograniczającą dopuszczalne wartości typów sighash hash dla transakcji V5 (wprowadzonych w ramach uaktualnienia sieci NU5). W konsekwencji węzły Zebra mogły akceptować i ostatecznie wydobywać bloki uznawane za nieprawidłowe przez węzły zcashd. Dodatkowo, dla transakcji V4, Zebra błędnie stosowała 'kanoniczną' postać typu hash podczas obliczania sighash, podczas gdy zcashd — zgodnie ze specyfikacją — używa wartości surowej (raw). Oba błędy mogą prowadzić do rozbicia konsensusu (consensus split) między implementacjami.
Atakujący lub złośliwy węzeł może doprowadzić do trwałego rozbicia konsensusu sieci Zcash między węzłami Zebra a zcashd, co zagraża integralności i dostępności sieci blockchain oraz umożliwia akceptację lub wydobycie bloków uznawanych za nieprawidłowe przez część sieci.
Należy zaktualizować zebrad do wersji 4.3.1 lub nowszej oraz zebra-script do wersji 5.0.2 lub nowszej. Patche są dostępne w repozytorium ZcashFoundation/zebra.
Zfnd zebrad w wersjach wcześniejszych niż 4.3.1 oraz Zfnd zebra-script w wersjach wcześniejszych niż 5.0.2
Podatność została ujawniona jako advisory GHSA-8m29-fpq5-89jj w repozytorium ZcashFoundation/zebra. Błąd wprowadzono w trakcie refaktoringu kodu — nie jest to podatność pierwotna, lecz regresja.
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:XZfnd Zebrad
APPZfnd< 4.3.1Zfnd Zebra Script
APPZfnd< 5.0.2
Powiązane podatności
Nieprawidłowa weryfikacja sygnatury w węźle ZEBRA (Zcash) — ryzyko rozszczepienia konsensusu
Błędne zliczanie sigops w Zebra powoduje split sieci Zcash
Crash węzła Zebra (Zcash) przez pole rk z wartością tożsamości w transakcjach Orchard
ZEBRA is a Zcash node written entirely in Rust. Prior to zebrad version 4.3.1 and zebra-consensus version 5.0....
ZEBRA is a Zcash node written entirely in Rust. From zebrad versions 2.2.0 to before 4.3.1 and from zebra-rpc ...