Wykryto drugi atak na pakiety w repozytorium NPM, wykorzystujący modyfikację samorozprzestrzeniającego się robaka Shai-Hulud, który wstawia złośliwe oprogramowanie do zależności. Atak doprowadził do opublikowania złośliwych wersji 605 pakietów, łącznie ponad 100 milionów pobrań.
Aby przeprowadzić atak, atakujący wykorzystali phishing do przechwycenia danych uwierzytelniających właściciela konta popularnego pakietu, wykorzystywanego jako zależność dla wielu innych pakietów. Korzystając z przejętego konta, atakujący opublikowali wersję pakietu zawierającą kod, który aktywował robaka po zainstalowaniu pakietu jako zależności. Po uruchomieniu 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 wydania dla pakietów opracowanych w bieżącym środowisku. Powoduje to infekcję łańcuchową całego drzewa zależności. Oprócz tokena NPM, robak przechowuje klucze dostępu do usług chmurowych GitHub oraz AWS, Azure i GCP (Google Cloud Platform), a także zmienne środowiskowe i inne wrażliwe dane wykrywalne przez skaner TruffleHog.
Dane wrażliwe znalezione w systemie są umieszczane w serwisie GitHub poprzez tworzenie repozytoriów o losowych nazwach (np. „qzx15djl71alh6p80h”) i frazie „Sha1-Hulud: Drugie Przyjście” w opisie. Dane są również szyfrowane i trafiają do logów GitHub Actions. Utworzone repozytorium zawiera plik JSON (np. jsonactionsSecrets.json lub contents.json) zawierający ciąg zawierający zakodowane w formacie base64 informacje o systemie, zmienne środowiskowe i przechwycone dane. Aby przesyłać informacje na zewnątrz z systemów ciągłej integracji opartych na GitHubie, robak tworzy procedurę obsługi GitHub Actions o nazwie „.github/workflows/formatter_123456789.yml” i konfiguruje moduł uruchamiający o nazwie SHA1HULUD.
Różnice w porównaniu z podobnym atakiem z września sprowadzają się do innej metody umieszczania złośliwego kodu w pakiecie. Złośliwe wersje generowane przez robaka twierdzą, że obsługują platformę Bun JavaScript. Polecenie „node setup_bun.js” jest dodawane do sekcji „preinstall” pliku package.json, która definiuje skrypty do uruchomienia przed instalacją.

Plik „setup_bun.js” zawiera kod do wykonania zaciemnionego skryptu „bun_environment.js”, który zawiera kod robaka. Aby się rozprzestrzeniać, robak lokalizuje kod pakietu, modyfikuje plik package.json (zwiększając numer wersji i wywołując setup_bun.js), dodaje pliki setup_bun.js i bun_environment.js, ponownie pakuje pakiet i wykonuje polecenie „npm publish”, aby wdrożyć nową wersję.
Wśród zagrożonych popularnych pakietów znajdują się: @zapier/zapier-sdk (2.8 miliona pobrań tygodniowo), @posthog/core (2.8 miliona), posthog-node (1.5 miliona), @asyncapi/specs (1.4 miliona) i @postman/tunnel-agent (1.2 miliona). Uważa się, że atak rozpoczął się od naruszenia bezpieczeństwa administratora pakietu @asyncapi/specs.
Źródło: opennet.ru
