Home » Chyba v klientovi Ethereum proof-of-stake zachycena a opravena bez incidentu

Chyba v klientovi Ethereum proof-of-stake zachycena a opravena bez incidentu

by Tim

Vývojáři platformy Ethereum objevili chybu, která mohla vést k zaseknutí řetězců EVM v důsledku chyby v klientu Besu způsobené přebytkem plynu.

Vývojáři Etherea odhalili chybu v klientu Besu Ethereum, která mohla vést k „selhání konsensu v sítích s více implementacemi EVM“.

Gary Schulte problém nahlásil do repozitáře Hyperledger GitHub a našel ho Martin Holst Swende. Má se za to, že „v žádné produkční síti nejsou transakce, které by toto selhání vyvolaly.“

Chybička identifikovaná během revize kódu The Merge

Swende zdokumentoval, že chybu objevil, když „prováděl TheMerge“. V odpovědinašemu novináři Swende uvedl, že uživatelé, kteří používají uzel Besu, by se zasekli a „nebyli by schopni sledovat řetězec kanonů“. Dále, jakákoli „síť ovládaná Besu by mohla být zastavena ve svých stopách.“

Klient Besu je druhým nejoblíbenějším klientem v síti Ethereum hned po klientu Geth. Podle údajů dostupných prostřednictvím webu ethernodes.org používá klienta Besu 7,81 % klientů hlavní sítě Ethereum.

Zranitelné verze klienta Besu

Verze 22.7.1 klienta Besu obsahuje opravu, která zajišťuje, že „přebytečný plyn nebude alokován na volání vnitřních transakcí a opravuje chyby přebytečného plynu“.

Verze starší než 22.1.3 také „zabrání nesprávnému provádění“, nicméně Ethereum mainnet vyžaduje další funkce, které jsou k dispozici až v novějších verzích. Verze klientů 22.4.0 až 22.7.0 jsou v současné době považovány za zranitelné vůči chybě plynu.

V důsledku toho musí uživatelé klientů Besu v mainnetu přejít na opravenou verzi.

Dopad a řešení

Danno Ferrin vytvořil kompletní popis problému v článku na Hackmd zveřejněném 21. září. Ferrinova analýza uvádí, že

„Chyba při zpracování nepodepsaných dat jako podepsaných dat může správně nakódovaný inteligentní kontrakt vytvořit volání funkce, které vrátí více plynu, než bylo předáno. „

Další technické informace týkající se chyby naleznete ve Ferrinově příspěvku. Hlavním poznatkem však je, že chyba byla vyřešena bez jakýchkoli problémů v hlavní síti Ethereum. Aby mohl zlý aktér chybu zákeřně zneužít, musel by jednat precizním způsobem.

„K povýšení této chyby na řetězovou chybu bylo zapotřebí záměrně vytvořeného volání, které zahrnovalo určité interakce s pravidlem EIP-150 „vše kromě jedné 64.“ a vyhrazení části dostupného plynu pro volající kontrakt. „

Pokud by chyba nebyla nalezena, mohlo by v každém řetězci s vysokou účastí klienta Besu dojít k „nekonečné smyčce“ inteligentního kontraktu, při níž by se kontrakt „skutečně vykonával navždy“.

Ferrin uvedl, že fuzzing umožnil vývojářům chybu bez problémů identifikovat a opravit. Fuzzing je metoda používaná vývojáři softwaru, „která zahrnuje poskytování neplatných, neočekávaných nebo náhodných dat jako vstupů do počítačového programu.“

„Největším poučením, které tento exploit ukázal, je, že porovnávání sledovaných dat při provádění fuzzingu zachytí více chyb než pouhé porovnávání konečných výsledků. „

Z chyby přebytečného plynu se díky pečlivosti vývojářů Etherea, kteří se věnují ochraně sítě, stala neudálost. Potenciální škody, které mohla způsobit, však ukazují složitost, která stojí za bezproblémovým provedením sloučení.

Chyba byla opravena ve verzi 22.7.1 pomocí „jiné metody převodu, která „sevře“ hodnoty přetečení na maximální očekávané hodnoty, čímž se vyhne problémům s překladem podepsaných hodnot“. Ferrin poznamenal, že uživatelé, kteří používají uzly ve zranitelném rozsahu, by měli aktualizovat na nejnovější verzi.

Related Posts

Leave a Comment