Bitcoin.com News
Obsługiwane przez

Kasplex KRC-20 Indexer Signature Bypass opróżnia dwie puli tokenów

W ten weekend osoba atakująca wyciągnęła 186,4 mln ZEAL i 54,4 mld NACHO z portfela mostkowego Kaspa KRC-20, nie posiadając jego klucza prywatnego, a następnie przepuściła tokeny przez sieci warstwy drugiej (L2) i sprzedała je do pul płynności. Najdziwniejsze jest to, że sama platforma Kaspa nie została zhakowana. Pięć prawidłowych transakcji oszukało indeksator pozałańcuchowy, który uznał za ważne transfery, których w rzeczywistości nikt nie podpisał, co spowodowało, że tokeny przeniesione przez most pozostały bez pokrycia, a niektóre pule straciły aż 99,6% swojej wartości po stronie KAS.

NAPISAŁ
UDOSTĘPNIJ
Kasplex KRC-20 Indexer Signature Bypass opróżnia dwie puli tokenów

Najważniejsze wnioski

  • Atakujący przeniósł 54,4 mld NACHO, nie posiadając klucza prywatnego do portfela mostkowego.
  • Pule Zealous Swap straciły od 94% do 99,6% swojej wartości po stronie KAS po sfałszowanych transferach.
  • Igra wstrzymała kluczowe wypłaty, podczas gdy operatorzy KRC-20 przygotowują się do załatania luki i ponownego zindeksowania systemu.

Pięć transakcji bez klucza prywatnego

Klucz prywatny ma stanowić granicę między posiadaniem kryptowaluty a zwykłą wiedzą o tym, gdzie się ona znajduje. 20 września ktoś znalazł sposób na obejście tego założenia w przypadku tokenów KRC-20, nie naruszając w ogóle łańcucha bazowego Kaspa.

Atakujący przeniósł 186 425 259 ZEAL i 54 397 983 246 NACHO z adresu powierniczego mostu, mimo że nie kontrolował jego klucza prywatnego. Tokeny te zostały następnie odesłane na ten sam adres powierniczy jako zwykłe depozyty mostowe, wyemitowane na warstwie EVM firmy Igra Labs oraz w Kasplex L2, a następnie wrzucone do pul płynności Zealous Swap.

Gdy sytuacja się uspokoiła, salda ZEAL i NACHO atakującego na L2 były puste, podczas gdy dotknięte tym incydentem pule straciły od 94% do 99,6% swojej wartości po stronie KAS. Oto haczyk: warstwa pierwsza (L1) Kaspa działała dokładnie tak, jak powinna.

Pusty podpis, który mimo to został zaakceptowany

Własność tokenów KRC-20 nie jest egzekwowana bezpośrednio przez konsensus Kaspa. Instrukcje dotyczące tokenów są zawarte w transakcjach Kaspa, podczas gdy indeksator Kasplex działający poza łańcuchem odczytuje te instrukcje i określa, kto jest właścicielem danego tokenu. Zazwyczaj transfer KRC-20 zawiera klucz publiczny, instrukcje dotyczące tokenów oraz ważny podpis. Atakujący zachował tę znaną strukturę, ale podał pusty podpis i dodał OP_NOT po OP_ENDIF.

X screenshot
Źródło obrazu: X

Pusty podpis powoduje, że OP_CHECKSIG zwraca wartość „false”, zamiast od razu unieważnić transakcję. Dodatkowy OP_NOT odwrócił ten wynik z powrotem na „true”, pozostawiając Kaspa z ważną transakcją. Na poziomie konsensusu nic nie poszło nie tak. Inaczej wyglądała sytuacja z indeksatorem. Rozpoznał on kopertę KRC-20, ale nie wymagał, aby skrypt dokładnie odpowiadał formatowi kanonicznemu. W konsekwencji uznał sfałszowany transfer za prawidłowy. Nawet własny interfejs API Kasplex zwrócił opAccept: 1 w przypadku pierwszej sfałszowanej transakcji ZEAL.

Każdy mógł stworzyć fałszywkę

Najgorsze było to, że atakujący nie musiał odkrywać żadnych ukrytych danych uwierzytelniających. Standardowy adres Kaspa ujawnia klucz publiczny potrzebny do skonstruowania sfałszowanej operacji KRC-20. Oznacza to, że przeniesienie tokenów na inny adres nie rozwiązuje podstawowego problemu. Dopóki indeksator nie zostanie załatany, a jego historia ponownie zindeksowana, ta sama luka może teoretycznie zostać wykorzystana przeciwko saldami KRC-20 w innych miejscach.

Pięć transakcji sfałszowało transfery ZEAL i NACHO. Natomiast dziewięć niewielkich wypłat po jednej jednostce zostało autentycznie podpisanych przez podmiot powierniczy i wydaje się, że były to próby sprawdzające, czy droga ucieczki działa. Co ciekawe, to właśnie te niewielkie transakcje były autentyczne. Portfel powierniczy zawierał około 50 innych tokenów KRC-20. Atakujący wybrał dwa.

Tokeny nadal tam są, ale nie ma już ich pokrycia

W niedzielę rano Igra poinformował, że całe zasoby ZEAL i NACHO z portfela powierniczego zostały przejęte, pozostawiając 97 651 212 ZEAL i 42 570 879 908 NACHO w sieciach warstwy 2 bez pełnego pokrycia w warstwie 1. Kolejne 4,5 miliarda tokenów NACHO pozostało w posiadaniu atakującego na L1.

Igra wstrzymała wypłaty z iKAS do Kaspa L1 oraz transfery przez Hyperlane, a użytkowników ostrzeżono przed mostkowaniem tokenów KRC-20, kupowaniem ZEAL lub NACHO na zdecentralizowanych giełdach (DEX) warstwy 2 (L2) oraz dodawaniem płynności do dotkniętych problemem pul. Natywne aktywa KAS, konsensus Kaspa oraz aktywa Igra, które nie były tokenami KRC-20 połączonymi za pomocą mostków, zostały uznane za nienaruszone.

Samo naprawienie oprogramowania nie wystarczy, by uporządkować ten bałagan. Zealous Swap twierdzi, że operatorzy muszą załatać indeksator i ponownie zindeksować jego historię, odrzucając puste podpisy, nieprawidłowo sformułowane tagi oraz skrypty wykraczające poza OP_ENDIF. Tymczasem Nacho the Kat twierdzi, że społeczność zamierza przejść na standard KCC-20, zaprojektowany w celu umieszczenia reguł dotyczących tokenów w skryptach egzekwowanych przez samą sieć.

Problem ten jest kolejnym z serii exploitów, błędów, ataków hakerskich i naruszeń bezpieczeństwa danych, które miały miejsce w ciągu ostatnich kilku tygodni. W sobotę Blink Wallet, dostawca infrastruktury Lightning Network – zarówno powierniczej, jak i niepowierniczej – ujawnił, że „kilkadziesiąt” kont powierniczych zostało opróżnionych. Firma zajmująca się cyberbezpieczeństwem DCENT również odnotowała w tym tygodniu wyprowadzenie środków z portfeli DCENT App Wallets. Sytuacja ta ma miejsce w momencie nasilenia ataków cyberbezpieczeństwa, a niektórzy podejrzewają, że za tą falą ataków stoi sztuczna inteligencja.

Ten artykuł został przetłumaczony z języka angielskiego przy użyciu sztucznej inteligencji. Oryginalna wersja angielska jest źródłem autorytatywnym; tłumaczenia automatyczne mogą zawierać nieścisłości, zwłaszcza w terminologii prawnej i regulacyjnej.