Mini Shai-Hulud: największy atak na łańcuch dostaw npm w historii

Mini Shai-Hulud: największy atak na łańcuch dostaw npm w historii
Photo by Kevin Horvat / Unsplash

11 maja 2026 roku grupa TeamPCP uruchomiła największą jak dotąd falę kampanii „Mini Shai-Hulud" — skoordynowany atak na ekosystemy npm i PyPI, który skompromitował 373 złośliwe wersje pakietów w 169 nazwach pakietów npm oraz wiele pakietów PyPI.

Które pakiety są dotknięte

Główny cel to pakiety z przestrzeni nazw @tanstack, w tym @tanstack/react-router — jedna z najczęściej używanych bibliotek routingu w ekosystemie React, z ok. 12 milionami pobrań tygodniowo.

Atak objął również: @mistralai/mistralai (PyPI), @opensearch-project/opensearch (1,3 mln pobrań tygodniowo), pakiety @uipath, guardrails-ai i PyTorch Lightning (wersje 2.6.2 i 2.6.3).

Jak działa robak

Malware działa w oparciu o hook preinstall — uruchamia się w momencie instalacji pakietu, przed jakąkolwiek walidacją bezpieczeństwa. Kradnie poświadczenia, a następnie używa ich do publikowania zainfekowanych wersji kolejnych pakietów, do których ofiara ma prawa publikacji — automatycznie, bez interwencji człowieka.

Payload systematycznie przeszukuje każdą warstwę tajemnic w środowiskach CI/CD: zmienne środowiskowe GitHub Actions, tokeny OIDC, sekrety repozytoriów przez GitHub REST API, poświadczenia AWS (w tym IMDSv2, ECS metadata, Secrets Manager, SSM Parameter Store), HashiCorp Vault, tokeny kont serwisowych Kubernetes oraz tokeny npm i GitHub PAT.

Najbardziej niebezpieczna funkcja — niszczyciel

Na maszynach deweloperów malware instaluje daemon gh-token-monitor (macOS LaunchAgent lub Linux systemd), który odpytuje GitHub co 60 sekund. Jeśli monitorowany token zostanie unieważniony, daemon próbuje wykonać rm -rf ~/ — czyszcząc cały katalog domowy. Daemon automatycznie kończy działanie po 24 godzinach.

⚠️ Krytyczne: Przed unieważnieniem tokenów GitHub należy najpierw wyszukać i usunąć daemon gh-token-monitor — w przeciwnym razie wywołasz wiper-a.

Trwałość w narzędziach deweloperskich

Malware uzyskuje trwałość przez zapis kopii siebie do katalogu hooków Claude Code (.claude/settings.json) oraz taskrunnera VS Code (.vscode/tasks.json) — zapewniając ponowne uruchomienie nawet po npm uninstall.

Co zrobić natychmiast

Jeśli zainfekowany pakiet uruchomił się na maszynie deweloperskiej lub runnerze CI/CD, należy traktować to środowisko jako skompromitowane. Zalecane działania: rotacja tokenów npm i GitHub, poświadczeń GitHub Actions, kluczy dostępu chmurowych (AWS, Azure, GCP), tokenów Vault oraz sekretów Kubernetes.

Kolejność: najpierw usuń daemon gh-token-monitor, dopiero potem rotuj tokeny. Przebuduj runnery CI/CD od zera.