Złośliwa wersja narzędzia programistycznego używanego przez deweloperów Injective została zaprojektowana w celu zbierania prywatnych kluczy portfeli i fraz odzyskiwania, co budzi obawy dotyczące aplikacji przetwarzających poufne informacje o portfelach za pośrednictwem tej wersji. Hakerzy przejęli kontrolę nad pakietem oprogramowania używanym przez deweloperów tworzących portfele i aplikacje dla blockchaina Injective, dodając kod zdolny do tajnego zbierania danych uwierzytelniających kryptowalutowych portfeli.
Firma bezpieczeństwa Socket wykryła złośliwy kod w wersji 1.20.21 pakietu @injectivelabs/sdk-ts, który pomaga aplikacjom łączyć się z Injective i zarządzać funkcjami związanymi z portfelami. Pakiet ten zazwyczaj notuje około 50 000 pobrań tygodniowo, choć liczba ta obejmuje wszystkie wersje i nie odzwierciedla liczby osób dotkniętych incydentem.
Socket poinformował, że skompromitowana wersja została pobrana około 310 razy. Jednak samo pobranie nie oznacza automatycznie ujawnienia klucza portfela. Niebezpieczny kod musiałby zostać uruchomiony w momencie, gdy aplikacja przetwarzała prywatny klucz lub frazę odzyskiwania. Nie opublikowano potwierdzonej liczby dotkniętych portfeli, a także nie ma publicznych dowodów na kradzież środków.
Incydent nie dotyczył naruszenia samego blockchaina Injective. Zamiast tego atakujący celowali w zaufany komponent oprogramowania używany przez deweloperów, co jest metodą powszechnie określaną jako atak na łańcuch dostaw oprogramowania.
Deweloperzy często polegają na gotowych pakietach oprogramowania, zamiast pisać każdą część aplikacji od podstaw. Pakiety te mogą obsługiwać zadania takie jak łączenie z blockchainem, tworzenie portfeli i podpisywanie transakcji. W tym przypadku złośliwy kod został umieszczony w oficjalnym pakiecie Injective i został zaprojektowany tak, aby aktywować się, gdy aplikacja przetwarzała poufne informacje o portfelu. Socket stwierdził, że mógł on przechwycić prywatny klucz lub mnemoniczną frazę odzyskiwania i próbować wysłać dane, maskując tę aktywność jako zwykłe raportowanie techniczne.
Prywatny klucz daje jego posiadaczowi kontrolę nad powiązanym portfelem kryptowalutowym. Fraza odzyskiwania może być użyta do przywrócenia tego samego portfela na innym urządzeniu. W przeciwieństwie do zwykłego hasła do konta, tych danych uwierzytelniających nie można po prostu zresetować po ich ujawnieniu.
Naruszenia prywatnych kluczy stały się jedną z najbardziej szkodliwych form ataków krypto, ponieważ przestępcy mogą przejąć bezpośrednią kontrolę nad portfelami bez konieczności łamania podstawowego blockchaina. Niedawny przegląd bezpieczeństwa wykazał, że incydenty związane z prywatnymi kluczami stanowiły około 40% strat odnotowanych w analizowanym zbiorze danych. Incydent z Injective pokazuje również, dlaczego atakujący coraz częściej celują w oprogramowanie i platformy, którym użytkownicy już ufają. Znajoma nazwa pakietu, uznane konto dewelopera lub rozpoznawalna aplikacja mogą sprawić, że złośliwa działalność będzie wydawać się legalna, zmniejszając szansę na zakwestionowanie jej przez użytkowników.
Socket poinformował, że nieautoryzowane zmiany zostały przesłane przez konto GitHub dewelopera z udokumentowaną historią wkładu w projekt Injective. Prawdziwy właściciel konta później wykrył tę aktywność i cofnął zmiany. Dostępny raport nie identyfikuje atakującego ani nie wyjaśnia, w jaki sposób uzyskano dostęp do konta.
Kod kradnący portfele znajdował się w wersji 1.20.21 głównego pakietu SDK Injective. Jednak 17 innych pakietów w kolekcji npm Injective zostało wydanych z linkami do tej samej dotkniętej wersji. Oznaczało to, że niektórzy deweloperzy mogli otrzymać skompromitowane oprogramowanie pośrednio. Aplikacja mogła zainstalować jeden pakiet Injective, który automatycznie pociągnął za sobą dotknięty SDK w tle.
Incydentu nie należy więc opisywać jako 18 osobno zainfekowanych pakietów. Dostępne dowody wskazują, że główny SDK zawierał złośliwą funkcjonalność, podczas gdy 17 powiązanych pakietów zależało bezpośrednio lub pośrednio od tej wersji. Socket poinformował, że dotknięta wersja została oznaczona jako przestarzała po wykryciu naruszenia i opublikowaniu czystej wersji. W momencie raportu Socket skompromitowana wersja nie została jednak całkowicie usunięta z npm, a powiązane materiały wydawnicze pozostały dostępne przez GitHub.
Raporty różniły się również co do dokładnej daty incydentu. Opublikowana oś czasu Socket odnosi się do 8 czerwca, podczas gdy niektóre wtórne raporty umiejscawiają aktywność w lipcu. Ponieważ miesiąc nie został niezależnie zweryfikowany, dokładną datę należy przypisać źródłu, a nie podawać jako niekwestionowany fakt.
Deweloperom, którzy używali wersji 1.20.21, bezpośrednio lub poprzez inny pakiet Injective, zalecono założenie, że dane uwierzytelniające portfeli przetwarzane przez dotknięte oprogramowanie mogły zostać ujawnione.
Zalecane działania obejmują:
Sama aktualizacja pakietu może nie chronić portfela, jeśli jego dane uwierzytelniające zostały już skopiowane. Gdy inna strona uzyska prywatny klucz lub frazę odzyskiwania, stary portfel nie powinien być już uważany za bezpieczny. Użytkownicy portfeli muszą również przeanalizować uprawnienia, które zatwierdzają. W odrębnym przypadku atakujący ukradł około 92 000 USD w Tether Gold po tym, jak ofiara podpisała złośliwe żądanie uprawnień, co pokazuje, że przestępcy nie zawsze muszą bezpośrednio uzyskać frazę ziarna, aby przejąć aktywa.
Chociaż tamten przypadek wykorzystywał inną technikę, podkreśla ten sam szerszy problem: bezpieczeństwo krypto zależy nie tylko od blockchaina, ale także od oprogramowania, zatwierdzeń i usług otaczających portfel. Obecnie nie ma dowodów na to, że blockchain Injective został zhakowany, że każdy portfel Injective został narażony na ryzyko lub że skradziono potwierdzoną ilość kryptowalut. Znane zagrożenie ogranicza się do aplikacji, które zainstalowały skompromitowany pakiet i przetwarzały przez niego dane uwierzytelniające portfeli.


