Według raportu firmy Verichains, zajmującej się bezpieczeństwem blockchain, luka w zabezpieczeniach mostu Ronin, która miała miejsce 6 sierpnia i spowodowała utratę 10 milionów dolarów, została spowodowana błędnym skryptem wdrażania aktualizacji.
Jak stwierdził Verichains, aktualizacja obniżyła próg głosowania dla walidatorów do zera, co w zasadzie pozwala każdemu użytkownikowi opuścić mostek „bez podpisu”.
Atakujący próbował wykorzystać tę lukę, aby osuszyć most, ale został wyprzedzony przez bota MEV, który faktycznie przeprowadził atak, prawdopodobnie nie mając takiego zamiaru. Właściciel bota później zwrócił większość funduszy zespołowi Ronin.
Analiza Verichainsa obnaża ryzyko, jakie podejmują użytkownicy, wchodząc w interakcję z aktualizowalnymi inteligentnymi kontraktami. Protokół mógł stracić całą kwotę, gdyby atakujący zapłacił więcej za gaz, a tym samym uniknął faworyta.
Ronin to sieć blockchain dedykowana do hostowania gier Web3. Jest najbardziej znana z tego, że jest domem Axie Infinity, gry polegającej na zarabianiu na hodowli potworów, która rzekomo miała ponad 2 miliony graczy w szczytowym okresie w 2022 roku. Gracze w Ronin używają mostu do przesyłania środków między Ethereum a Ronin.
Według raportu Verichaina most opiera się na zmiennej mimimumVoteWeight, aby uniemożliwić użytkownikom wypłacanie środków, które do nich nie należą. Każda transakcja musi zostać autoryzowana przez minimalną liczbę walidatorów określoną przez tę zmienną. Gdy obliczana jest zmienna minimumVoteWeight, jako dane wejściowe używana jest inna zmienna, totalWeight.
We wcześniejszych wersjach mostu totalWeight istniał w osobnym kontrakcie, zwanym „MainchainBridgeManager”. Kiedy programiści tworzyli nową aktualizację, chcieli przenieść tę zmienną do wewnętrznej pamięci mostu, zamiast pozostawiać ją w innym kontrakcie. Oznaczało to, że musieli zainicjować zmienną w momencie wdrożenia, ustawiając TotalWeight na wartość, którą miała w poprzedniej wersji.
Niestety, tutaj aktualizacja poszła strasznie źle. Według Verichaina, twórcy Ronina napisali kilka różnych funkcji „initialize”, które miały być wywołane w momencie wdrożenia. Każda z tych funkcji miała inny numer wersji. Trzecia wersja zawierała kluczową inicjalizację totalWeight. Ale kiedy twórcy napisali skrypt wdrożenia, wywołali tylko wersję 4, pozostawiając totalWeight na domyślnej wartości zero.
Po tej aktualizacji użytkownicy nie musieli już składać podpisów walidatorom, aby udowodnić swoje prawo do wycofania. Mogli wycofać się „bez podpisu”, ponieważ „spełniał on warunek minimumVoteWeight (który wynosił 0 z powodu nieinicjacji)”.
W poście z 7 sierpnia na X, audytor inteligentnych kontraktów Composable Security Damian Rusinek podał więcej szczegółów na temat tego, co umożliwiło przeprowadzenie ataku. Według Rusinka, atakujący dostarczył podpis z adresu kończącego się na B849f. Jednak ten adres „[nie znajdował się] na liście operatorów mostów”. Nie musiał znajdować się na liście operatorów mostów, ponieważ „minimalna liczba głosów operatorów wynosiła 0”. Dlatego „wymagany był tylko JEDEN podpis i mógł to być [KAŻDY] prawidłowy podpis”.
Chociaż nie wdawali się w tak szczegółowe informacje jak Verichains i Rusinek, Ronin potwierdził 6 sierpnia w poście X, że do eksploitu doszło, gdy aktualizacja „wprowadziła problem powodujący, że most błędnie zinterpretował wymagany próg głosów operatorów mostu wymagany do wypłaty środków”.
Dane blockchain pokazują, że ta transakcja ataku była frontrunowana przez bota MEV o nazwie „Frontrunner Yoink”, który skutecznie wyprowadził z mostu kryptowalutę o wartości ponad 10 milionów dolarów. Według Rusinka bot najprawdopodobniej „symulował zmianę adresu i kwoty oraz użył własnego podpisu”. Następnie przesłał transakcję, gdy symulacja udowodniła, że exploit zadziała.
Powiązane: Sieć Ronin wykorzystana na 9,8 mln dolarów w ETH, podejrzewany haker white hat
Właściciel Frontrunner Yoink zwrócił większość funduszy tego samego dnia, a zespół Ronin ogłosił, że będzie mógł zatrzymać 500 000 dolarów jako nagrodę za wykrycie błędów.
Użytkownicy Ronina otarli się o śmierć z powodu exploita z 6 sierpnia. Na szczęście atak był prowadzony przez bota MEV, którego właścicielem był uczciwy operator white hat. Jednak fakt, że atak był tak bliski sukcesu, ujawnia ryzykowną naturę ulepszonych mostów międzyłańcuchowych.
Niektóre sieci twierdzą, że problem ten zostanie wyeliminowany, gdy warstwy Ethereum 2 osiągną „etap 2”, a wszystkie uaktualnienia zostaną opóźnione o co najmniej siedem dni po rozpoczęciu. Krytycy twierdzą jednak, że proces osiągania tego etapu trwa zbyt długo i może nigdy nie zostać ukończony.
Czasopismo: Dziwne włamanie do iVest „pustego adresu”, miliony komputerów nadal podatne na złośliwe oprogramowanie „Sinkclose”: Crypto-Sec