Atak na pakiety towarzyszące w repozytorium NPM weszła na nowy poziom. Oprócz używania złośliwego oprogramowania do przechwytywania płatności i poufnych informacji, napastnicy przeszli do wprowadzania robaka do skompromitowanych pakietów w celu automatyzacji podstawiania złośliwego oprogramowania w zależnościach. Zastosowanie robaka zostało odnotowane po skompromitowaniu pakietu NPM @ctrl/tinycolor, który ma 2,2 mln pobrań tygodniowo i był używany jako bezpośrednia zależność w 964 pakietach. W wyniku działalności robaka atak objął 187 pakietów, dla których utworzono złośliwe wydania (477 złośliwych wydań).
W ramach nowego ataku, po uzyskaniu danych logowania towarzyszącego w wyniku phishingu, napastnicy publikują wydań pakietu z robakiem, który aktywuje się przy instalacji skompromitowanego pakietu wśród zależności. Po aktywacji robak przeszukuje bieżące środowisko w poszukiwaniu danych uwierzytelniających, pobierając i uruchamiając narzędzie TruffleHog. W przypadku wykrycia tokena połączenia z katalogiem NPM, robak automatycznie publikuje nowe złośliwe wydanie i zaraża drzewo zależności. Oprócz tokena dostępu do NPM, robak zapisuje klucze dostępu do GitHub oraz usług chmurowych AWS, Azure i GCP (Google Cloud Platform), a także inne poufne dane, które jest w stanie wykryć skaner TruffleHog.
Złośliwe wydania są tworzone dla 20 najpopularniejszych pakietów, do których ma dostęp znaleziony token NPM. Funkcjonalność publikacji wydania jest realizowana w formie funkcji NpmModule.updatePackage, która pobiera archiwum źródłowe pakietu, zmienia numer wersji i dodaje postinstall-hook do pliku package.json, podstawia obsługę bundle.js, przepakowuje pakiet i publikuje go. Obsługuje działanie w systemach Linux i macOS.
Robak otrzymał kodową nazwę Shai-Hulud (gigantyczny robak wspomniany w powieści Diuna). Znalezione w systemie dane uwierzytelniające są publikowane na GitHubie poprzez tworzenie repozytoriów o nazwie Shai-Hulud (np. „B611/Shai-Hulud”), a także w kodowanej formie odzwierciedlają się w logach GitHub Actions. W tworzonym repozytorium znajduję się plik data.json, który zawiera ciąg z kodowanymi metodą base64 informacjami o systemie, zmiennych środowiskowych oraz przechwyconych kluczach dostępu. W CI opartym na GitHubie robak tworzy handler GitHub Actions (.github/workflows/shai-hulud-workflow.yml) do przesyłania informacji na zewnętrzny host. Wygląda na to, że atak nie ogranicza się do wspomnianych 187 pakietów, ponieważ na GitHubie wciąż pojawiają się nowe repozytoria o nazwie Shai-Hulud i pliku data.json.

Między innymi, w wyniku aktywności robaka dotkniętych zostało 25 pakietów firmy CrowdStrike, rozwijającej narzędzia do ochrony przed atakami poprzez zależności (Supply Chain). Według firmy CrowdStrike skompromitowane pakiety nie były wykorzystywane w platformie Falcon, a atak nie rozprzestrzenił się na klientów. Ponadto wiadomo, że poprzednia fala publikacji złośliwych wersji w NPM, która miała miejsce bez robaka, dotknęła projekt gemini-cli rozwijany przez firmę Google.
Źródło: opennet.ru
