Ponad 100 pakietów NPM i PyPI zainfekowanych w atakach Shai-Hulud - Security Bez Tabu

Ponad 100 pakietów NPM i PyPI zainfekowanych w atakach Shai-Hulud

Cybersecurity news

Wprowadzenie do problemu / definicja

Ataki na łańcuch dostaw oprogramowania pozostają jednym z najpoważniejszych zagrożeń dla organizacji rozwijających i utrzymujących aplikacje. Najnowsza kampania Shai-Hulud pokazuje, że cyberprzestępcy coraz skuteczniej wykorzystują zaufanie do publicznych repozytoriów pakietów, takich jak NPM i PyPI, aby wprowadzać złośliwy kod do środowisk deweloperskich, procesów CI/CD oraz systemów produkcyjnych.

W opisywanej fali ataków zainfekowano ponad 100 pakietów, a malware nie ograniczał się wyłącznie do jednorazowej infekcji. Jego celem była kradzież poświadczeń, tokenów i kluczy API, a następnie wykorzystanie ich do dalszego rozprzestrzeniania się w kolejnych projektach i zależnościach.

W skrócie

  • Nowe warianty Shai-Hulud, nazwane Miasma i Hades, objęły ponad 100 pakietów w NPM i PyPI.
  • Kampania nasiliła się na początku czerwca 2026 roku.
  • Złośliwy kod uruchamiał się podczas instalacji pakietu lub startu interpretera Python.
  • Malware wyszukiwał sekrety, tokeny i dane dostępowe do usług chmurowych oraz systemów publikacji pakietów.
  • Przejęte poświadczenia były wykorzystywane do kompromitacji kolejnych pakietów i dalszego szerzenia infekcji.

Kontekst / historia

Shai-Hulud nie jest całkowicie nowym zagrożeniem, lecz rozwinięciem wcześniejszych kampanii wymierzonych w ekosystem open source. Według dostępnych analiz aktywność związana z tym mechanizmem była obserwowana już od września 2025 roku. Istotnym momentem w rozwoju zagrożenia miało być upublicznienie kodu źródłowego robaka w maju 2026 roku, co mogło przyspieszyć pojawienie się nowych klonów oraz wariantów.

Na początku czerwca 2026 roku aktywność operatorów wyraźnie wzrosła. Najpierw raportowano incydenty dotyczące pakietów JavaScript, a następnie podobny model działania został zauważony również w PyPI. To potwierdziło, że kampania nie jest ograniczona do jednego języka czy jednego repozytorium, lecz stanowi wieloplatformowy atak na proces dostarczania oprogramowania.

Analiza techniczna

Wariant Miasma był powiązany przede wszystkim z pakietami NPM. W praktyce pełnił rolę wieloetapowego droppera uruchamianego podczas instalacji zależności. W części przypadków wykorzystywano zmodyfikowane pliki budowania, w tym binding.gyp, aby ominąć prostsze metody wykrywania skoncentrowane na standardowych skryptach instalacyjnych. Taka technika utrudnia identyfikację zagrożenia podczas rutynowej analizy manifestu pakietu.

Po wykonaniu malware przeszukiwał środowisko lokalne i powiązane usługi w poszukiwaniu sekretów. Celem były przede wszystkim tokeny publikacyjne, klucze API, dane CI/CD, poświadczenia do rejestrów pakietów oraz inne informacje umożliwiające publikowanie lub modyfikowanie komponentów. To właśnie zdolność do wykorzystania skradzionych danych do infekowania kolejnych pakietów sprawia, że Shai-Hulud ma charakter samopowielającego się zagrożenia łańcucha dostaw.

Wariant Hades został zidentyfikowany w PyPI i wykorzystywał mechanizm wykonywania kodu przy starcie środowiska Python za pomocą plików *.pth. Taki plik może zostać przetworzony przez interpreter podczas inicjalizacji, co umożliwia uruchomienie dodatkowego kodu bez bezpośredniej akcji użytkownika. W analizowanej kampanii rozwiązanie to służyło między innymi do pobrania runtime’u Bun oraz uruchomienia dalszych komponentów napisanych w JavaScript.

Badacze wskazali także na zmiany w łańcuchu wykonania złośliwego kodu. W nowszych próbkach payload nie zawsze był osadzony bezpośrednio w loaderze. Zamiast tego operatorzy rozdzielali funkcje odpowiedzialne za inicjalizację i właściwe wykonanie, a także wykorzystywali mechanizmy przeszukiwania ścieżek środowiska, aby utrudnić wykrycie. To sugeruje aktywny rozwój kampanii i szybkie dostosowywanie technik do publikowanych analiz oraz mechanizmów obronnych.

Konsekwencje / ryzyko

Ryzyko związane z tą kampanią jest wysokie, ponieważ zainfekowane pakiety mogą zostać pobrane automatycznie przez pipeline’y budowania, stacje robocze programistów i środowiska produkcyjne. Jeżeli malware uzyska dostęp do sekretów, może doprowadzić do wtórnych naruszeń obejmujących repozytoria kodu, rejestry pakietów, systemy CI/CD oraz infrastrukturę chmurową.

Szczególnie narażone są organizacje, które:

  • publikują własne pakiety do NPM lub PyPI,
  • przechowują tokeny wydawnicze w zmiennych środowiskowych,
  • nie stosują krótkowiecznych poświadczeń,
  • nie monitorują zmian w zależnościach i lockfile’ach,
  • pozwalają na automatyczne wykonywanie skryptów instalacyjnych bez dodatkowej kontroli.

Skutki incydentu mogą obejmować kompromitację kont maintainerów, nieautoryzowane publikacje nowych wersji, przejęcie procesów build i release, wyciek danych projektowych oraz dalsze rozprzestrzenienie zagrożenia na klientów i partnerów. W środowiskach przedsiębiorstw oznacza to również koszty operacyjne, obowiązki związane z reakcją na incydent oraz ryzyko utraty zaufania.

Rekomendacje

Organizacje korzystające z NPM i PyPI powinny traktować tego typu zdarzenie jako pełnoskalowy incydent supply chain. W pierwszej kolejności warto ustalić, czy w środowisku występowały zainfekowane wersje pakietów, a następnie przeprowadzić rotację wszystkich potencjalnie zagrożonych sekretów.

  • Zweryfikować historię pobrań i buildów pod kątem złośliwych pakietów.
  • Przeprowadzić rotację tokenów NPM, PyPI, GitHub oraz poświadczeń CI/CD.
  • Sprawdzić historię publikacji własnych pakietów i wykryć ewentualne nieautoryzowane wersje.
  • Ograniczyć automatyczne wykonywanie skryptów instalacyjnych tam, gdzie jest to możliwe.
  • Monitorować pliki i mechanizmy takie jak postinstall, binding.gyp, setup.py, pyproject.toml oraz *.pth.
  • Wdrożyć zasadę najmniejszych uprawnień dla tokenów publikacyjnych i odejść od statycznych sekretów na rzecz krótkowiecznych poświadczeń.
  • Rozszerzyć detekcję o analizę zachowań pakietów, a nie tylko sygnatury.
  • Stosować SBOM, podpisywanie artefaktów i kontrolę provenance buildów.

Ważnym elementem obrony jest również zabezpieczenie kont maintainerów z użyciem MFA oraz ścisła segmentacja uprawnień publikacyjnych. W praktyce to właśnie ograniczenie dostępu i szybka rotacja sekretów mogą znacząco zmniejszyć skalę wtórnych naruszeń.

Podsumowanie

Kampania Shai-Hulud potwierdza, że ataki na łańcuch dostaw open source stają się coraz bardziej zautomatyzowane, skalowalne i trudniejsze do wykrycia. Warianty Miasma i Hades wykorzystują odmienne techniki wykonania kodu w ekosystemach NPM i PyPI, ale ich cel pozostaje wspólny: kradzież poświadczeń i dalsze infekowanie zależności.

Dla organizacji oznacza to konieczność traktowania bezpieczeństwa pakietów jako integralnej części ochrony środowisk deweloperskich i procesów wydawniczych. Kluczowe znaczenie mają szybkie wykrycie kompromitacji, kontrola nad zależnościami oraz konsekwentne ograniczanie zaufania do zewnętrznych komponentów.

Źródła

  1. SecurityWeek — Over 100 NPM, PyPI Packages Hit in New Shai-Hulud Supply Chain Attacks — https://www.securityweek.com/over-100-npm-pypi-packages-hit-in-new-shai-hulud-supply-chain-attacks/
  2. Socket — analiza wariantu Hades i złośliwych pakietów PyPI — https://socket.dev/
  3. StepSecurity — raporty dotyczące kampanii Shai-Hulud w ekosystemach NPM i PyPI — https://www.stepsecurity.io/
  4. Snyk — analiza złośliwych pakietów powiązanych z wariantem Miasma — https://snyk.io/
  5. Endor Labs — analiza aktywności w PyPI i zjawiska phantom releases — https://www.endorlabs.com/