NOWOŚĆ! Szkolenie AI w pracy admina

Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!

 

Kolejny atak na łańcuch dostaw w npm. Samoreplikujący się robak powiązany z Keyv zainfekował ponad 420 pakietów

04 września 2026, 08:54 | W biegu | 0 komentarzy

Badacze bezpieczeństwa z firmy SafeDep poinformowali o wykryciu masowego ataku na łańcuch dostaw w ekosystemie npm. Złośliwy kod został wykryty w keyv@6.0.0 przeznaczonym do zarządzania pamięcią podręczną w środowisku Node.js oraz powiązanych z nim pakietów z rodziny cacheable, flat-cache oraz cache-manager. Charakter infekcji wskazuje na samoreplikującego się robaka, zdolnego do kradzieży danych uwierzytelniających, tokenów oraz kluczy prywatnych. Głównym celem atakujących były konta deweloperskie, wykorzystywane do automatycznego rozprzestrzeniania malware na kolejne paczki.

TLDR:

  • Analitycy z SafeDep poinformowali o wykryciu masowego ataku na ekosystem npm.
  • Złośliwy kod zaobserwowano w pakiecie keyv oraz powiązanych z nim pakietach z rodziny cacheable, flat-cache oraz cache-manager.
  • Proces infekcji przebiega przy użyciu skryptu preinstall lub złośliwych plików konfiguracyjnych, które automatycznie uruchamiały ładunek w środowiskach deweloperskich oraz CI/CD.
  • Głównym celem atakujących jest kradzież poświadczeń, tokenów uwierzytelniających i kluczy API, a następnie automatyczna propagacja malware na kolejne pakiety oraz środowiska.
  • Dotychczas wykryto 1684 zainfekowane wersji w 420 pakietach, a zebrane poszlaki wskazują na użycie zestawu narzędzi z rodziny Shai-Hulud.
Manifest złośliwego pakietu keyv. Źródło: safedep.io 
Fragment manifestu pliku package.json. Źródło: safedep.io

Druga ścieżka skierowana była przede wszystkim do deweloperów i aktywowała się podczas otwarcia pobranego repozytorium w środowisku programistycznym. W tym scenariuszu cyberprzestępcy umieścili złośliwe pliki konfiguracyjne w katalogach .claude oraz .vscode

W przypadku narzędzia Claude Code, plik .claude/settings.json zawierał hook SessionStart uruchamiający skrypt .vscode/setup.mjs. Z kolei dla Visual Studio Code plik .vscode/tasks.json definiował zadanie Environment Setup z parametrem runOn: folderOpen, które po otwarciu katalogu wywoływało .claude/setup.mjs

Takie krzyżowe wywoływanie skryptów między katalogami edytorów tworzyło spójną sieć powiązań wewnątrz sklonowanego projektu, a jego głównym celem było utrudnienie procesu analizy. Warto dodać, że ścieżka ta nie wykonywała się bezwarunkowo. Aby atak miał szanse powodzenia, deweloper musiał wyrazić zgodę (Workspace Trust) na uruchamianie skryptów dostarczonych wraz z kodem źródłowym. 

Fragment złośliwego pliku konfiguracyjnego .claude/settings.json. Źródło: safedep.io
Fragment złośliwego pliku konfiguracyjnego .vscode/tasks.json. Źródło: safedep.io

Warto również wspomnieć o persystencji na zainfekowanych maszynach. Atakujący zaimplementowali mechanizm ciągłego monitorowania skradzionych poświadczeń, który instaluje się jako usługa systemd (Linux) lub LaunchAgent (macOS). W przypadku systemu Windows nie zaobserwowano dedykowanych mechanizmów persystencji (takich jak wpisy w rejestrze czy też harmonogramie zadań). Skrypt został przygotowany w środowisku Bash, więc jego wykonanie jest możliwe głównie za pośrednictwem WSL.

W przypadku systemów Linux skrypt monitorujący uruchamia się z opcją lingering, która pozwala procesom użytkownika działać w tle nawet po jego wylogowaniu. Usługa co 60 sekund wysyła zapytanie do API GitHuba ([api.github.com/user](https://api.github.com/user)), korzystając z przejętego tokena. Jeżeli wykryje, że token został unieważniony (serwer zwróci kod błędu HTTP z rodziny 40X), natychmiast uruchamiany jest handler. We wcześniejszych tego typu atakach unieważnienie tokena skutkowało aktywacją mechanizmu odwetowego i usunięciem katalogu domowego użytkownika (rm -rf ~/*). Biorąc pod uwagę fakt, że kod handlera nie został jak dotąd jednoznacznie określony, należy założyć najgorszy scenariusz.

Chociaż na podstawie zaobserwowanych taktyk, technik i procedur (TTPs) trudno jednoznacznie powiązać kampanię z konkretną grupą cyberprzestępczą, to istnieją poszlaki wskazujące na użycie narzędzi z rodziny złośliwego oprogramowania Shai-Hulud. Na dowód powyższego, tymczasowe punkty odbioru danych (dead-drop C2) były tworzone w publicznych repozytoriach GitHuba z opisem Shai-Hulud: Here We Go Again oraz katalogiem results

Dead-drop C2. Źródło: safedep.io 

Przedstawiona kampania pokazuje, że współczesne ataki na łańcuchy dostaw nie polegają jedynie na jednorazowej podmianie pojedynczego pakietu. Użycie samoreplikującego się robaka wykradającego poświadczenia oraz publikującego zainfekowane wersje pakietów sprawia, że skala operacji rośnie w zastraszającym tempie. 

Najsmutniejsze w tym wszystkim jest to, że usunięcie zainfekowanego pakietu wcale nie chroni przed skutkami ataku. Wykradzione tokeny i klucze API pozwalają atakującemu na dalsze działania w infrastrukturze, dlatego jedyną skuteczną reakcją jest sprawdzenie czy w systemie nie został uruchomiony skrypt monitorujący ważność tokenów, a następnie unieważnienie wszystkich sekretów.

Źródło: safedep.io  

~_secmike

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz