Popularne tematy
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
To jest rodzaj błędu, który nie pozwala zespołom protokołów spać w nocy.
Eksploatacja na kwotę 5 milionów dolarów w ZKSwap, spowodowana przez jedno zdanie pozostawione w złym miejscu.
Oto szczegółowe omówienie, jak to się stało i jak monitorowanie on-chain mogłoby temu zapobiec.
🧵

1/ 9 lipca GMX został zhakowany na kwotę 42 milionów dolarów.
Ale tego dnia wydarzyło się coś jeszcze, co ledwie ktoś zauważył: most ZKSwap został cicho opróżniony na kwotę 5 milionów dolarów.
Ciekawa część? Nie było żadnego wymyślnego exploit'u. Po prostu krytyczna funkcja, która… nic nie robiła.

2/ ZKSwap to zk-rollup zbudowany na Ethereum.
Jak wiele rollupów, używa mostu do przenoszenia aktywów między L1 a L2.
Jako zabezpieczenie, most zawiera „Tryb Exodus”, sposób dla użytkowników na odzyskanie funduszy bez potrzeby angażowania operatora.
Teoretycznie to świetny pomysł. W praktyce…
3/ Tryb Exodus pozwala użytkownikom ręcznie udowodnić, że posiadali tokeny w ostatnim zweryfikowanym stanie L2.
To mechanizm awaryjny: bez zaufania, samodzielne przechowywanie, nieinteraktywne.
Jednak implementacja ZKSwap miała jeden fatalny błąd: Funkcja odpowiedzialna za weryfikację dowodów nie weryfikowała niczego.
Dosłownie.
4/ Oto kod, który powinien był zatrzymać atak 👇
Na pierwszy rzut oka wygląda jak prawdziwy weryfikator zk-proof.
Ale przyjrzyj się uważnie pierwszej linii: return true;
To wszystko. Nic więcej się nie wykonuje.

5/ Jaki jest wynik? Każdy „dowód” wypłaty (bez względu na to, jak fałszywy) przeszedł walidację.
Kontrakt akceptował dowolne roszczenia dotyczące sald tokenów... i przypisywał je, jakby były prawdziwe.
Przekształcił bezpieczny mechanizm awaryjny w niechroniony kran.
6/ Napastnik nie potrzebował wyszukanych exploitów - wystarczyły powtarzające się wywołania exit() z wymyślonymi danymi.
Ominięto kontrole salda, wypłacono przez wiele tokenów i wykorzystano słabą logikę nullifiera, aby uniknąć wykrycia.
Wszystko to podczas gdy kontrakt mówił: ✅

7/ To nie był jakiś niejasny przypadek brzegowy.
To była podstawowa logika odzyskiwania aktywów, pozostawiona całkowicie otwarta.
A ponieważ tryb Exodus rzadko jest uruchamiany, uszkodzona ścieżka pozostała niezauważona... przez miesiące.
8/ Oto co powinno było wywołać alarmy:
• Aktywacja trybu Exodus po długim okresie bezczynności
• Dziesiątki jednoczesnych wezwań do wypłaty
• Nagły wzrost zmian w saldach do wypłaty
Wszystko to było widoczne i mogło zostać zatrzymane dzięki monitorowaniu on-chain w czasie rzeczywistym.

9/ Jaka jest lekcja?
• Kod awaryjny to wciąż kod produkcyjny
• Ścieżki zapasowe nie pomagają, jeśli nie działają
• Monitorowanie w czasie rzeczywistym nie jest opcjonalne, to kwestia przetrwania
37,84K
Najlepsze
Ranking
Ulubione