Popularne tematy
#
Labubu craze goes global with memecoin price exploding 3,000%
#
Startup meta gains attention onchain
#
ETH is showing strong price momentum following the recent Pectra upgrade.
#
Boop.Fun leading the way with a new launchpad on Solana.
Popularna wersja: Proste "tłumaczenie" na interpretację analizy @CetusProtocol hakera przez szefa technologicznego:
Ten atak uwidacznia klasyczny problem z przepełnieniem liczb całkowitych, który objawia się obcinaniem danych podczas konwersji typów.
Szczegóły techniczne po rozłożeniu:
1) Lokalizacja luki: Problem występuje w mechanizmie konwersji typów funkcji get_amount_by_liquidity, a konwersja rzutowania z U256 na U64 powoduje utratę danych wysokiego poziomu.
2) Proces ataku:
1. Atakujący przekazuje dużą ilość parametrów płynności przez funkcję add_liquidity;
2. Liczba tokenów B wymaganych do obliczenia funkcji wywołania systemowego get_delta_b;
3. W procesie obliczeniowym mnoży się dwa dane typu U128, a teoretyczny wynik powinien być typu U256;
Wada klucza: Wynik u256 jest rzutowany na u64 po zwróceniu funkcji, co powoduje obcięcie danych 128-bitowych wysokiego poziomu.
3) Efekt wykorzystania: Limit płynności, który pierwotnie wymagał dużej liczby tokenów do wybicia, może teraz zostać zrealizowany przy użyciu tylko bardzo małej liczby tokenów. Atakujący uzyskuje ogromny udział w płynności przy bardzo niskich kosztach, a następnie realizuje arbitraż puli poprzez zniszczenie części płynności.
Prosta analogia: tak jak przy użyciu kalkulatora, który może wyświetlić tylko 8 cyfr do obliczenia 1 miliarda × 1 miliarda, wynik 20-cyfrowego obliczenia może wyświetlić tylko ostatnie 8 cyfr, a pierwsze 12 cyfr znika bezpośrednio. Osoba atakująca wykorzystuje tę lukę.
Żeby było jasne: ta luka nie ma nic wspólnego z podstawową architekturą bezpieczeństwa @SuiNetwork, a "chwała" bezpieczeństwa języka Move jest na razie nadal wiarygodna. Dlaczego?
Język Move ma znaczące zalety w zakresie zarządzania zasobami i bezpieczeństwa typów, a także może skutecznie zapobiegać problemom z bezpieczeństwem niskiego poziomu, takim jak podwójne wydatki i wycieki zasobów. Tym razem jednak protokół Cetus jest matematycznym błędem na poziomie logiki aplikacji, a nie wadą projektową w samym języku Move.
W szczególności system typów Move, choć rygorystyczny, nadal opiera się na właściwej ocenie programisty w przypadku wyraźnego rzucania. Gdy program aktywnie wykonuje konwersję typu z U256 na U64, kompilator nie może stwierdzić, czy jest to zamierzone, czy błąd logiczny.
Ponadto ten incydent związany z bezpieczeństwem nie ma nic wspólnego z podstawowymi funkcjami Sui, takimi jak mechanizm konsensusu, przetwarzanie transakcji i zarządzanie stanem. Sui Network jedynie wiernie wykonuje instrukcje transakcyjne złożone przez protokół Cetus, a luka w zabezpieczeniach wynika z wad logicznych samego protokołu warstwy aplikacji.
Mówiąc wprost, żadna ilość zaawansowanych języków programowania nie jest w stanie całkowicie wyeliminować błędów logicznych w warstwie aplikacji. Move może zapobiec większości podstawowych zagrożeń bezpieczeństwa, ale nie może zastąpić programistów sprawdzaniem granic logiki biznesowej i ochroną przed przepełnieniem operacji matematycznych.
53.44K
Najlepsze
Ranking
Ulubione