gik|iewicz

szukaj
Robak npm infekuje ponad 400 pakietów w wielu organizacjach

Robak npm infekuje ponad 400 pakietów w wielu organizacjach

Robak Shai-Hulud zainfekował ponad 440 pakietów npm w ciągu zaledwie 30 minut, uderzając bezpośrednio w dziewięć niezależnych organizacji. Kampania z 4 sierpnia 2026 roku rozprzestrzeniła się błyskawicznie przez popularne biblioteki takie jak keyv oraz cacheable. Atak wykorzystywał złośliwe skrypty instalacyjne do kradzieży poświadczeń i przejmowania kolejnych kont deweloperskich.

TL;DR: Złośliwy robak nazwany Shai-Hulud skompromitował ponad 440 pakietów npm w dziewięciu organizacjach, w tym @ornikar, @deliveroo i @qlik. Atak z 4 sierpnia 2026 roku trwał około pół godziny. Zainfekowane pakiety obejmowały ekosystemy keyv oraz cacheable, które łącznie generują ponad 2 miliardy pobrań miesięcznie. Sprawcy używali plików math_init.js oraz Math_Symbol.js do podmiany poświadczeń deweloperów.

Jak robak Shai-Hulud infekuje pakiety npm?

Robak rozprzestrzenia się poprzez przejmowanie kont opiekunów popularnych repozytoriów, a następnie wstrzykiwanie złośliwego kodu do zależności. Złośliwy kod ukryto w plikach o nazwach math_init.js oraz Math_Symbol.js. Atak wykorzystywał mechanizm preinstall script, który uruchamiał się automatycznie podczas pobierania biblioteki przez niczego niepodejrzewających programistów. Co więcej, skrypt instalacyjny natychmiast wykradał poświadczenia logowania z lokalnego środowiska.

Przechwycone tokeny autoryzacyjne pozwalały na dalsze przejmowanie kolejnych pakietów. Dlatego infekcja rozprzestrzeniała się kaskadowo na inne organizacje. Mechanizm działania przypomina wcześniejsze incydenty, takie jak atak na łańcuch dostaw opisany na łamach The Hacker News. Skrypty instalacyjne to potężne wektory ataku. Wystarczy jedno przejęte konto, aby zainfekować setki projektów.

Badacze z ox.security potwierdzili, że kampania Shai-Hulud skompromitowała ponad 440 pakietów npm, które łącznie generowały ponad 2 miliardy pobrań miesięcznie przed incydentem z 4 sierpnia 2026 roku.

Poniżej znajduje się zestawienie głównych celów ataku:

  • @ornikar – organizacja edukacyjna z wieloma zależnościami
  • @deliveroo – pakiety logistyczne o szerokim zasięgu
  • @onereach – narzędzia komunikacyjne dla firm
  • @arv-bedrock – biblioteki infrastrukturalne
  • @servicetitan – pakiety dla branży usługowej
  • @qlik – komponenty analityczne i danych
  • keyv – popularny system pamięci podręcznej
  • cacheable – rodzina bibliotek optymalizacyjnych

Które organizacje i pakiety ucierpiały przez robaka npm?

Atak z 4 sierpnia 2026 roku dotknął dokładnie dziewięciu niezależnych organizacji publikujących swoje biblioteki w rejestrze npm. Złośliwy kod przeniknął do ponad 440 pakietów, obejmując infrastrukturę takich firm jak Deliveroo czy Qlik. Zainfekowane zostały również rodziny pakietów keyv oraz cacheable, które są powszechnie stosowane w aplikacjach produkcyjnych na całym świecie.

Ponadto, rozmiar ataku wzrósł do 868 skompromitowanych pakietów. Łączna liczba pobrań tych bibliotek przekraczała 2 miliardy instalacji miesięcznie przed wykryciem infekcji. Taki zasięg sprawia, że kampania jest jednym z największych ataków na łańcuch dostaw JavaScript w historii. Podobnie przebiegł incydent szczegółowo opisany przez ekspertów z ox.security. Skala problemu rośnie bardzo szybko.

Oto tabela przedstawiająca kluczowe organizacje dotknięte atakiem:

OrganizacjaObszar działaniaStatus infekcji
@ornikarOprogramowanie edukacyjnePotwierdzona kompromitacja
@deliverooAplikacje logistycznePotwierdzona kompromitacja
@qlikNarzędzia analitycznePotwierdzona kompromitacja
keyvPamięć podręczna danychSkompromitowany rdzeń projektu
cacheableOptymalizacja wydajnościPełna infekcja ekosystemu

Czym jest złośliwy skrypt math_init.js?

Złośliwy skrypt math_init.js to specjalnie przygotowany plik JavaScript używany przez robaka do kradzieży poświadczeń z systemów ofiar. Plik ten był dodawany bezpośrednio do struktury zainfekowanych pakietów npm. Jego obecność umożliwiała atakującym zdalne pobieranie tokenów sesyjnych oraz danych logowania przechowywanych w plikach konfiguracyjnych deweloperów. Z kolei plik Math_Symbol.js pełnił funkcję drugiego wektora ładunku.

Skrypty te wykorzystywały luki w konfiguracji środowisk programistycznych, na przykład nieodpowiednio zabezpieczone zmienne systemowe. Atakujący konsekwentnie modyfikowali plik package.json, aby upewnić się, że złośliwy kod wykona się przed główną aplikacją. To podkreśla konieczność ciągłego monitorowania zależności zewnętrznych. Proaktywne skanowanie kodu staje się kluczowe dla bezpieczeństwa infrastruktury. Atak udowodnił słabość domyślnych ustawień.

Według analizy safedep.io, atak z 4 sierpnia 2026 roku zainfekował ponad 400 pakietów w dziewięciu organizacjach w ciągu zaledwie 30 minut, wykorzystując do tego jeden identyczny bajtowo skrypt kradnący poświadczenia.

W jaki sposób złośliwy kod infekuje środowiska Claude Code oraz VS Code?

Robak Shai-Hulud nie ograniczał się wyłącznie do kradzieży poświadczeń npm, ponieważ dodatkowo instalował haki w popularnych narzędziach programistycznych. Złośliwe skrypty modyfikowały konfigurację edytora VS Code oraz agenta Claude Code. Atakujący wykorzystali te modyfikacje do przechwytywania danych wprowadzanych bezpośrednio w środowisku pracy dewelopera. Co więcej, haki te pozwalały na ukrytą exfiltrację kodu źródłowego.

Skrypty instalacyjne automatycznie dodawały złośliwe wpisy do plików konfiguracyjnych edytorów. Zatem każde kolejne uruchomienie zainfekowanego edytora wysyłało dane na serwery kontrolowane przez napastników. Taki wektor ataku uderza bezpośrednio w najważniejsze narzędzia używane przez programistów na co dzień. Kradzież poświadczeń odbywała się całkowicie w tle. Zainfekowane środowiska działały normalnie, co znacznie opóźniło wykrycie anomalii.

Dlaczego robak Shai-Hulud rozprzestrzeniał się tak błyskawicznie?

Po wykradzeniu tokenu uwierzytelniającego z lokalnego pliku .npmrc, złośliwy kod natychmiastowo publikował kolejne zainfekowane wersje pakietów. Sprawcy wykorzystali fakt, że deweloperzy często udzielają szerokich uprawnień skryptom instalacyjnym. Złośliwy kod wyszukiwał w systemie plików ofiary wszystkie projekty zawierające plik package.json. Następnie wstrzykiwał swoje zależności bezpośrednio do tych plików. Dlatego każdy nowy pobrany pakiet stawał się nosicielem infekcji.

Proces ten był w pełni zautomatyzowany, co pozwoliło na osiągnięcie tak ogromnej skali ataku w tak krótkim czasie. Zainfekowane pakiety obejmowały między innymi biblioteki keyv oraz cacheable. Kaskadowe przejmowanie kont obejmowało różne zakresy organizacyjne, na przykład pakiety firm @deliveroo oraz @qlik. Skrypt wykonywał się z poziomu wiersza poleceń, omijając standardowe zabezpieczenia interfejsu przeglądarkowego. Poniżej znajduje się zestawienie głównych metod wykorzystanych przez robaka do błyskawicznej propagacji:

  • Kradzież tokenów sesyjnych – odczyt danych logowania z plików konfiguracyjnych
  • Modyfikacja package.json – dodawanie złośliwych zależności w tle
  • Skrypty preinstall – automatyczne uruchamianie kodu podczas pobierania
  • Podmiana plików – wstrzykiwanie bibliotek math_init.js oraz Math_Symbol.js
  • Eksploatacja uprawnień – wykorzystanie szerokich praw dostępu u deweloperów
  • Klonowanie struktury – powielanie złośliwego kodu w podkatalogach projektu
  • Omijanie piaskownicy – wykonywanie komend poza izolowanym środowiskiem
  • Wysyłanie danych – ukryte przesyłanie skradzionych tokenów na zewnętrzne serwery

Atak udowodnił, że scentralizowany rejestr npm pozostaje wysoce podatny na ten typ infekcji. Szybkość działania robaka uniemożliwiała ręczne reakcje ze strony opiekunów projektów. W rezultacie jedynie zablokowanie kont zainfekowanych organizacji powstrzymało dalsze rozprzestrzenianie się złośliwego kodu.

Jakie kroki podjęto po wykryciu ataku na ekosystem npm?

Zespół bezpieczeństwa natychmiast rozpoczął procedury izolacji po wykryciu anomalii w rejestrze npm. Zainfekowane pakiety, w tym kluczowe biblioteki keyv i cacheable, zostały szybko cofnięte do wcześniejszych, bezpiecznych wersji. Konta deweloperów skojarzone z organizacjami @ornikar oraz @qlik tymczasowo zawieszono w celu zablokowania publikacji kolejnych złośliwych aktualizacji. Z kolei zespół szybkiego reagowania musiał ręcznie analizować setki skompromitowanych repozytoriów.

Napastnicy ukryli złośliwy ładunek w plikach math_init.js oraz Math_Symbol.js. Proces czyszczenia rejestru wymagał ścisłej współpracy z zespołami z dziewięciu niezależnych firm. Zewnętrzni eksperci, tacy jak safedep.io, udostępnili narzędzia do skanowania drzew zależności. Szybka reakcja zespołów response ograniczyła potencjalne straty. Usuwanie skutków ataku trwało wiele godzin.

Jak zablokować skrypty preinstall i zabezpieczyć projekt przed kradzieżą tokenów?

Najskuteczniejszą metodą ochrony przed podobnymi atakami jest całkowite wyłączenie skryptów instalacyjnych w plikach konfiguracyjnych menedżera pakietów. Narzędzia takie jak npm czy yarn pozwalają na globalną blokadę wykonywania kodu podczas pobierania zależności. Ponadto, organizacje powinny wdrożyć rygorystyczne procedury rotacji tokenów autoryzacyjnych. Tokeny deweloperskie muszą posiadać minimalne wymagane uprawnienia, ograniczone wyłącznie do konkretnych zadań.

Wdrożenie systemów monitorowania łańcucha dostaw znacząco utrudnia modyfikację plików package.json bez wiedzy zespołu bezpieczeństwa. Automatyczne skanowanie kodu przed instalacją wykrywa anomalie w nowo dodanych zależnościach. Proaktywne podejście do zarządzania pakietami drastycznie zmniejsza ryzyko infekcji. Weryfikacja sum kontrolnych to podstawa obrony. Konieczne jest również regularne aktualizowanie oprogramowania firm trzecich.

Jakie są długoterminowe skutki ataku dla ekosystemu JavaScript?

Kompromitacja ponad 440 pakietów ujawnia poważne braki w architekturze zaufania dla popularnych repozytoriów open source. Deweloperzy masowo zastanawiają się nad wdrożeniem alternatywnych menedżerów pakietów oferujących domyślnie restrykcyjne środowisko uruchomieniowe. Zmiana podejścia do zarządzania skryptami instalacyjnymi staje się standardem bezpieczeństwa. Firmy odpowiedzialne za infrastrukturę chmurową wdrażają dodatkowe warstwy weryfikacji kodu źródłowego. Przyszłość ekosystemu zależy od szybkich napraw.

Inicjatywy takie jak podpisywanie pakietów kryptograficznie zyskują na znaczeniu w odpowiedzi na rosnącą falę ataków. Społeczność programistów zaczyna domagać się domyślnego blokowania skryptów preinstall w nowych wersjach menedżerów pakietów. Rozwiązania oparte na analizie behawioralnej kodu pomagają wykrywać anomalie przed ich uruchomieniem w środowiskach produkcyjnych. Bezpieczeństwo staje się priorytetem numer jeden.

Często zadawane pytania

Ile czasu zajęło robakowi Shai-Hulud zainfekowanie 400 pakietów?

Złośliwy kod skompromitował ponad 440 pakietów npm w ciągu zaledwie 30 minut (safedep.io, 2026). Atak rozpoczął się 4 sierpnia 2026 roku od przejęcia konta opiekuna biblioteki keyv.

Które pliki zawierały złośliwy kod kradnący poświadczenia?

Robak Shai-Hulud używał plików math_init.js oraz Math_Symbol.js do uruchomienia skryptu preinstall (ox.security, 2026). Skrypty te automatycznie wykradały tokeny logowania z plików .npmrc lokalnych środowisk programistycznych.

Jakie łączne zagrożenie generowały zainfekowane pakiety?

Zainfekowane pakiety, w tym ekosystemy keyv i cacheable, generowały łącznie ponad 2 miliardy pobrań miesięcznie (ox.security, 2026). Skala ta czyniła atak jednym z najbardziej dotkliwych incydentów w historii łańcucha dostaw JavaScript.

W jaki sposób robak infekował środowiska Claude Code oraz VS Code?

Złośliwy kod modyfikował pliki konfiguracyjne edytorów VS Code oraz Claude Code, aby instalować ukryte haki (thehackernews.com, 2026). Modyfikacje te pozwalały na ciągłą exfiltrację kodu źródłowego oraz danych wprowadzanych w interfejsie programistycznym.

Podsumowanie

Atak Shai-Hulud stanowi ogromne zagrożenie dla ekosystemu npm, które ujawniło krytyczne luki w mechanizmach zaufania dla skryptów instalacyjnych. Rozprzestrzenianie się złośliwego kodu do ponad 440 pakietów w 30 minut pokazuje, jak podatne na kompromitację są scentralizowane repozytoria. Wykorzystanie popularnych narzędzi deweloperskich do dalszego rozsiewania infekcji znacznie potęguje straty. Przyszłe ataki prawdopodobnie będą wykorzystywać te same wektory, dlatego natychmiastowe zabezpieczanie środowisk programistycznych staje się absolutną koniecznością.

Zaleca się przeprowadzenie pełnego audytu plików lockfile w organizacjach korzystających z zewnętrznych zależności. Wdrożenie narzędzi automatycznie blokujących nieautoryzowane skrypty preinstall drastycznie zmniejsza ryzyko infekcji. Regularna rotacja poświadczeń oraz ograniczanie uprawnień tokenów npm to podstawowe mechanizmy obronne. Czas reakcji jest ważnym elementem w ograniczaniu strat po incydentach. Sprawdź swoje drzewo zależności już dziś i udostępnij ten artykuł swojemu zespołowi programistycznemu.