Injective okradzione o 4,9 mln USD w wyniku exploitu z kolizją identyfikatorów rynków opcji binarnych
Najważniejsze informacje
- •31 sierpnia atakujący wykorzystał lukę w rozliczaniu opcji binarnych na Injective, aby wykraść około 4,9 mln USD.
- •Exploit opierał się na 299 utworzonych bez pozwoleń rynkach opcji binarnych z kontrolowanymi przez atakującego wyroczniami, skonfigurowanymi tak, aby nigdy nie dostarczały cen, co umożliwiało podwojone wypłaty dzięki transakcjom dopasowywanym samodzielnie.
- •Przyczyną źródłową była kolizja identyfikatorów rynków wynikająca z łączenia pól bez separatorów przy generowaniu market_id, pozwalająca funduszowi ubezpieczeniowemu INJ zderzyć się z rynkiem USDC.
- •Walidatory zatrzymały łańcuch Injective na około 3 godziny i 42 minuty, przesuwając się o tylko jeden blok i zachowując wszystkie wykonane transakcje zamiast wycofywać je jak Cronos po niedawnym incydencie.
- •Skradzione środki zostały przeniesione mostem do Ethereum i skonsolidowane jako około 1 980 ETH w adresie 0x5a18…69ea, podczas gdy Injective publikowało treści marketingowe i nie wydało żadnego publicznego oświadczenia o incydencie w trakcie zatrzymania.

Injective, protokół blockchain Layer 1 specjalizujący się w zdecentralizowanych finansach, padło 31 sierpnia ofiarą exploitu, który zaatakował około 4,9 mln USD dzięki krytycznej luce w systemie rozliczania opcji binarnych. Rynki opcji binarnych — na których traderzy obstawiają tak/nie wyniki cenowe w ustalonym terminie wygaśnięcia — należą do strukturalnie bardziej złożonych instrumentów pochodnych, jakie może oferować bezpozwoleńczy moduł giełdowy, ponieważ poprawność rozliczenia zależy od dostarczania danych przez wyrocznię, logiki zwrotów i księgowości funduszu ubezpieczeniowego działających bez przypadków brzegowych.
Atakujący systematycznie nadużył bezpozwoleńczego mechanizmu tworzenia rynków, uruchamiając 299 natychmiastowych rynków opcji binarnych w ciągu 19 godzin, z których każdy był zarządzany przez kontrolowaną przez niego wyrocznię celowo skonfigurowaną tak, aby nigdy nie dostarczała cen. Symbole wyroczni zostały jawnie skonstruowane tak, aby uruchamiać ścieżkę zwrotu z powodu braku ceny, przy czym znaczniki czasu wygaśnięcia i rozliczenia dzieliło zaledwie kilka sekund.
A binary-options settlement bug has been exploited on @Injective according to @ErthlingPaddy. Attacker bridged ~$4.9M to Ethereum, the funds are unmoved. pic.twitter.com/fwnx6cQajJ — Defimon Alerts (@DefimonAlerts) September 1, 2026
Analiza on-chain pokazuje, że exploit opierał się na transakcjach dopasowywanych samodzielnie między subkontami należącymi do atakującego. Aktor wpłacał kolateral, zajmował jednocześnie pozycje długie i krótkie po zmanipulowanych cenach i wykorzystywał mechanizm zwrotu, aby w każdym cyklu wypłacić mniej więcej dwukrotność wpłaconej kwoty. W jednej udokumentowanej sekwencji około 105 000 USDC wygenerowało wypłaty przekraczające 204 000 USDC. Zyski zostały następnie przetransferowane mostem do Ethereum przez CCTP, wymienione na ETH na Uniswap i skonsolidowane w adresie 0x5a18…69ea, gdzie około 1 980 ETH — czyli około 4,88 mln USD — pozostawało nietknięte w chwili publikacji.
Łańcuch Injective został zatrzymany na około trzy godziny i 42 minuty, od bloku 181 027 006 o 16:10 UTC do bloku 181 027 007 o 19:52 UTC. Zatrzymania łańcucha — osiągane, gdy walidatory koordynują wstrzymanie produkcji bloków — to jedno z niewielu narzędzi awaryjnych dostępnych dla sieci opartych na Cosmos SDK w obliczu aktywnego exploitu, ale wiążą się z własnymi kompromisami, co ilustruje rozbieżność między reakcją Injective a Cronos. W przeciwieństwie do Cronos, które po niedawnym incydencie wycofało transakcje, Injective przesunęło się przez moment zatrzymania o dokładnie jeden blok, zachowując wszystkie wykonane transakcje. Ostateczna próba exploitu nie powiodła się wyłącznie dlatego, że jej znacznik czasu rozliczenia wygasł wśród mocno spowolnionej produkcji bloków, która tuż przed interwencją walidatorów spadła do interwałów około 38 minut.
Injective halted for ~4 hours today after a binary-options exploit drained multiple assets. In that window, the official @injective account posted twice — both marketing. "ICYMI our AI Agent SDK is live." "Bridge your ETH to Injective." Zero mention of the halt. No "funds are… — Paddy-earthling (@ErthlingPaddy) August 31, 2026
Wada techniczna i krytyka braku transparentności
Źródło problemu to kolizja identyfikatorów rynków w rdzennej logice Injective. Protokół generuje market_id przez konkatenację oracleType, ticker, quoteDenom, oracleSymbol i oracleProvider bez separatorów i prefiksów długości. Schemat haszowania pozwolił atakującemu utworzyć fundusz ubezpieczeniowy denominowany w INJ, który zderzył się z identyfikatorem rynku opcji binarnych denominowanego w USDC. Kolizje identyfikatorów tego typu to dobrze znana klasa błędów w systemach budujących klucze z łączonych niestrukturyzowanych pól — dlatego wiele protokołów przyjmuje identyfikatory z prefiksami długości lub separacją przestrzeni nazw.
Gdy rozliczenie weszło na ścieżkę zwrotu z powodu braku ceny, system próbował pokryć wytworzony deficyt USDC surową saldem całkowitym dołączonego funduszu INJ. Ponieważ kod traktował minimalne salda INJ jako wystarczające pokrycie deficytu denominowanego w dolarach, ominął wymagany haircut wśród pozostałych pozycji i zezwolił na pełne wypłaty sztucznie zawyżonych sald.
Incydent odnowił krytykę decyzji Injective o usunięciu swoich głównych repozytoriów łańcucha z GitHuba, posunięcia wcześniej uzasadnianego zmniejszeniem powierzchni ataku. Krytycy twierdzą, że exploit pokazuje fundamentalne ograniczenia bezpieczeństwa przez ukrywanie: atakujący oparł się wyłącznie na publicznej dokumentacji SDK, starszych skompilowanych plikach binarnych do wersji 1.17.2 oraz działającym testnecie Frontrunner, aby empirycznie odtworzyć lukę. Tymczasem niezależnym audytorom i badaczom whitehat odmówiono dostępu na poziomie źródła niezbędnego do proaktywnej identyfikacji wady. Epizod wpisuje się w powracający branżowy spór o zamknięty kod łańcucha, poprzedzony wcześniejszymi dyskusjami, czy utajnianie źródła realnie zniechęca zdeterminowanych atakujących, czy przede wszystkim utrudnia niezależny przegląd.
Injective made its core chain code private — injective-core and injective-chain are both gone from GitHub (check for yourself: 404). The stated logic: harder for attackers to find bugs. This exploit is the counterargument. You don't need the source to find this. The attack… — Paddy-earthling (@ErthlingPaddy) August 31, 2026
Problem techniczny pogłębiły błędy komunikacyjne. W trakcie zatrzymania oficjalne kanały społecznościowe Injective publikowały treści marketingowe promujące nowe produkty, bez uznania incydentu ani uspokojenia użytkowników. Podejście to ostro kontrastowało z protokołami takimi jak MANTRA i Cronos, które publicznie ujawniły niedawne awarie.
Wiadomość on-chain oferująca nagrodę została wysłana do atakującego z niezweryfikowanego portfela smart kontraktu, choć Injective nie potwierdziło oficjalnego zaangażowania, a tożsamość nadawcy pozostaje niejasna. W chwili pisania protokół nie wydał żadnego publicznego oświadczenia dotyczącego exploitu, jego wpływu na użytkowników ani planowanych środków naprawczych. Kluczowe otwarte pytania dla obserwatorów obejmują to, czy skonsolidowane ETH pod adresem 0x5a18…69ea zostanie przeniesione, czy nastąpi oficjalna nagroda lub negocjacje oraz czy Injective w odpowiedzi na incydent ujawni poprawkę albo przywróci publiczny dostęp do źródeł.