Złośliwy robak atakuje domeny kryptograficzne w łańcuchu dostaw
24 listopada firma ochroniarska Aikido wykryła drugą falę samoreplikującego się robaka npm Shai-Hulud, narażając na szwank 492 pakiety o łącznej liczbie 132 milionów pobrań miesięcznie.
Atak uderzył w główne ekosystemy, w tym AsyncAPI, PostHog, Postman, Zapier i ENS, wykorzystując ostatnie tygodnie przed ostatecznym terminem npm 9 grudnia na wycofanie starszych tokenów uwierzytelniających.
Kolejka triage Aikido oflagował włamanie około godziny 3:16 UTC, gdy złośliwe wersje go-template AsyncAPI i 36 powiązanych pakietów zaczęły rozprzestrzeniać się w rejestrze.
Atakujący oznaczył skradzione repozytoria poświadczeń opisem “Sha1-Hulud: The Second Coming”, zachowując teatralny branding z wrześniowej kampanii.
Robak instaluje środowisko uruchomieniowe Bun podczas instalacji pakietu, a następnie wykonuje złośliwy kod, który przeszukuje środowiska programistyczne w poszukiwaniu ujawnionych sekretów za pomocą TruffleHog.
Naruszone klucze API, tokeny GitHub i dane uwierzytelniające npm są publikowane w losowo nazwanych repozytoriach publicznych, a złośliwe oprogramowanie próbuje się rozprzestrzeniać, wypychając nowe zainfekowane wersje do maksymalnie 100 dodatkowych pakietów, co stanowi pięciokrotność skali wrześniowego ataku.
Ewolucja techniczna i destrukcyjny ładunek
Listopadowa iteracja wprowadza kilka modyfikacji w stosunku do wrześniowego ataku.
Złośliwe oprogramowanie tworzy teraz repozytoria z losowo generowanymi nazwami dla skradzionych danych, zamiast używać zakodowanych na stałe nazw, co komplikuje wysiłki związane z usuwaniem.
Kod instalacyjny instaluje Bun poprzez setup_bun.js przed wykonaniem głównego ładunku w bun_environment.js, który zawiera logikę robaka i procedury infiltracji danych uwierzytelniających.
Najbardziej destrukcyjny dodatek: jeśli złośliwe oprogramowanie nie może uwierzytelnić się w GitHub lub npm przy użyciu skradzionych danych uwierzytelniających, usuwa wszystkie pliki w katalogu domowym użytkownika.
Analiza Aikido ujawniła błędy wykonania, które ograniczyły rozprzestrzenianie się ataku. Kod bundlingu, który kopiuje pełnego robaka do nowych pakietów, czasami nie zawiera bun_environment.js, pozostawiając tylko skrypt instalacyjny Bun bez złośliwego ładunku.
Pomimo tych niepowodzeń, początkowe ataki trafiły w cele o wysokiej wartości, narażając je na ogromne ryzyko.
Pakiety AsyncAPI zdominowały pierwszą falę, z 36 skompromitowanymi wydaniami, w tym @asyncapi/cli, @asyncapi/parser i @asyncapi/generator.
PostHog pojawił się o 4:11 UTC, z zainfekowanymi wersjami posthog-js, posthog-node i dziesiątkami wtyczek. Pakiety Postman pojawiły się o 5:09 UTC.
Kompromis Zapier wpłynął na @zapier/zapier-sdk, zapier-platform-cli i zapier-platform-core, podczas gdy kompromis ENS wpłynął na @ensdomains/ensjs, @ensdomains/ens-contracts i ethereum-ens.
Tworzenie gałęzi GitHub sugeruje dostęp na poziomie repozytorium
Zespół AsyncAPI odkrył złośliwą gałąź w swoim repozytorium CLI utworzoną bezpośrednio przed pojawieniem się skompromitowanych pakietów w npm.
Gałąź ta zawierała wdrożoną wersję złośliwego oprogramowania Shai-Hulud, co wskazuje, że atakujący uzyskał dostęp do zapisu w samym repozytorium, a nie tylko przejął tokeny npm.
Ta eskalacja odzwierciedla technikę zastosowaną w oryginalnym naruszeniu Nx, w którym atakujący zmodyfikowali repozytoria źródłowe, aby wstrzyknąć złośliwy kod do legalnych potoków kompilacji.
Aikido szacuje, że 26 300 repozytoriów GitHub zawiera obecnie skradzione dane uwierzytelniające oznaczone opisem “Sha1-Hulud: The Second Coming”.
Repozytoria zawierają sekrety ujawnione przez środowiska programistyczne, które uruchomiły skompromitowane pakiety, w tym dane uwierzytelniające usługi w chmurze, tokeny CI / CD i klucze uwierzytelniające dla interfejsów API innych firm.
Publiczny charakter wycieków zwiększa szkody: każdy atakujący monitorujący repozytoria może zbierać dane uwierzytelniające w czasie rzeczywistym i przeprowadzać ataki wtórne.
Czas ataku i łagodzenie skutków
Zbiega się to w czasie z ogłoszeniem npm z 15 listopada, że cofnie klasyczne tokeny uwierzytelniające 9 grudnia.
Decyzja atakujących o rozpoczęciu ostatniej kampanii na dużą skalę przed upływem terminu sugeruje, że zdawali sobie sprawę, że okno dla kompromisów opartych na tokenach się zamyka. Oś czasu Aikido pokazuje, że pierwsza fala Shai-Hulud rozpoczęła się 16 września.
“Drugie przyjście” z 24 listopada stanowi ostatnią okazję atakującego do wykorzystania starszych tokenów, zanim migracja npm odetnie ten dostęp.
Aikido zaleca zespołom ds. bezpieczeństwa przeprowadzenie audytu wszystkich zależności z dotkniętych ekosystemów, w szczególności pakietów Zapier, ENS, AsyncAPI, PostHog i Postman zainstalowanych lub zaktualizowanych po 24 listopada.
Organizacje powinny obrócić wszystkie sekrety GitHub, npm, chmury i CI / CD używane w środowiskach, w których te pakiety były obecne, i przeszukać GitHub pod kątem repozytoriów z opisem “Sha1-Hulud: The Second Coming”, aby ustalić, czy wewnętrzne poświadczenia zostały ujawnione.
Wyłączenie skryptów postinstalacyjnych npm w potokach CI zapobiega wykonywaniu ich w czasie instalacji w przyszłości, a przypinanie wersji pakietów za pomocą plików blokad ogranicza narażenie na nowo skompromitowane wydania.