Jeśli twoja organizacja używa któregokolwiek z tych pakietów — sprawdź natychmiast: PyTorch Lightning 2.6.2 lub 2.6.3, intercom-client 7.0.4 lub 7.0.5, intercom-php 5.0.2, cztery pakiety SAP npm z 29 kwietnia (pełna lista w źródłach). Rotuj wszystkie poświadczenia dostępne z zainfekowanych środowisk.
Jeden szczegół który zmienia ocenę ryzyka: wykradzione poświadczenia 1800 deweloperów zostały opublikowane publicznie na GitHubie pod opisem "A Mini Shai-Hulud has Appeared" — dostępnym dla każdego kto zna ten string. TeamPCP nie jest jedynym podmiotem który ma dostęp do tych danych. Są dostępne dla wszystkich zainteresowanych od momentu publikacji.
Dwa tygodnie, pięć ekosystemów
Kiedy pisaliśmy o zatrутym PyTorch Lightning cztery dni temu, kampania była świeża i dotyczyła PyPI. Dziś OX Security, Socket i SecurityWeek opublikowały pełną mapę operacji która trwała od 29 kwietnia do 1 maja.
29 kwietnia: cztery pakiety SAP na npm — @sap/cds-dk, @sap/cap-mockserver, @sap/hdi-deploy, @sap/cloud-sdk-core. Małe zasięgi, ale SAP CAP Framework jest wdrożony w dziesiątkach tysięcy enterprise środowisk.
30 kwietnia: PyTorch Lightning 2.6.2 i 2.6.3 na PyPI — 31 000 gwiazdek, setki tysięcy pobrań dziennie. Socket wykrył po 18 minutach.
30 kwietnia równolegle: intercom-client 7.0.4 i 7.0.5 na npm przez skompromitowane konto maintainera który zainstalował pyannote-audio — bibliotekę analizy dźwięku z PyTorch Lightning jako zależnością transitive. Jeden zainfekowany pakiet stał się mostem do zupełnie innego ekosystemu.
1 maja: intercom-php 5.0.2 na Packagist — ponad 20 milionów pobrań lifetime. Następnie Ruby Gems i moduły Go.
Łącznie: pięć ekosystemów, sześć głównych pakietów, prawie 10 milionów miesięcznych pobrań samych Lightning i intercom-client razem.
Jak działa dynamiczny C2 przez GitHub
Jest jeden element techniczny tej kampanii który odróżnia ją od wcześniejszych iteracji Shai-Hulud i który jest wart dokładnego opisania.
Poprzednie wersje używały stałych domen C2 — punkt sterujący z konkretnym adresem IP. Gdy domenę zablokowano, komunikacja z serwerem sterującym ustawała. Mini Shai-Hulud rozwiązał ten problem przez GitHub.
Ładunek po instalacji przeszukuje publiczne commity na GitHubie pod kątem konkretnych stringów. W tych commitach — wyglądających jak normalna aktywność deweloperska z opisem chore: update dependencies — są zakodowane komendy C2. Gdy infrastruktura jest blokowana, atakujący po prostu tworzy nowy commit z nowym adresem. Robak go znajdzie automatycznie.
Domena zero[.]masscan[.]cloud służy jako pierwotny endpoint eksfiltracji. Mechanizm GitHub jako fallback sprawia że blokowanie domeny nie wyłącza kampanii — spowalnia ją co najwyżej.
CISO Whisperer opisuje to precyzyjnie: "Attacker's traffic to github.com typically passes through security tools without flags and cannot be traced back to a domain belonging to the threat actor." GitHub jako infrastruktura C2 — zaufana platforma z milionami legalnych użytkowników, której ruch jest domyślnie przepuszczany przez filtry sieciowe.
1800 repozytoriów dostępnych publicznie dla wszystkich
OX Security potwierdza: ponad 1800 repozytoriów z wykradzionymi poświadczeniami deweloperów zostało opublikowanych publicznie na kontach ofiar.
To jest szczegół który wymaga zatrzymania. Dane nie trafiają tylko na serwer sterujący TeamPCP. Trafiają na publiczne repozytoria GitHub — z opisem "A Mini Shai-Hulud has Appeared" — dostępne dla każdego kto wyszuka ten string.
W momencie gdy te repozytoria są publiczne, atakujący nie jest jedynym który ma dostęp do zawartych poświadczeń. Są dostępne dla konkurencyjnych grup przestępczych, badaczy bezpieczeństwa, automatycznych scraperów i każdego zainteresowanego. Nawet jeśli TeamPCP zostanie zneutralizowany jutro — te dane już żyją własnym życiem.
Intercom-client payload aktywnie skanuje środowiska Kubernetes i HashiCorp Vault: klucze AWS, tokeny GitHub i npm, bazy danych, klucze prywatne, klucze API Stripe, Slack i Twilio, dane uwierzytelniające VPN, portfele kryptowalutowe, tokeny sesji Discord i Slack. Jeden zainfekowany deweloper z dostępem do środowisk produkcyjnych to kompletny zestaw poświadczeń do infrastruktury całej organizacji.
Intercom przez pyannote-audio: pomost między ekosystemami
Pisaliśmy o tym jako szczególe przy PyTorch Lightning — maintainer intercom-client zainstalował lokalnie bibliotekę pyannote-audio. Ta biblioteka miała PyTorch Lightning jako zależność transitive. Przy imporcie Lightning uruchomił się robak. Skradzione tokeny npm zostały użyte do opublikowania złośliwej wersji intercom-client.
Socket ujął to celnie: "To czyni sytuację szczególnie niepokojącą, bo jedna skompromitowana zależność może stać się mostem do kolejnych ekosystemów pakietów."
To jest dokładna ilustracja tego dlaczego zarządzanie zależnościami transitive jest tak trudne. Maintainer intercom-client nie zainstalował PyTorch Lightning. Zainstalował narzędzie do analizy dźwięku które miało PyTorch Lightning gdzieś głębiej w drzewie zależności. Nie ma żadnego rozsądnego procesu przeglądu który by ten wektor wychwycił przy codziennej pracy deweloperskiej.
Połączenie z tym co opisywaliśmy w tym miesiącu
Kampania TeamPCP z 22 kwietnia — Checkmarx KICS i Bitwarden CLI. Shai-Hulud zatruwający narzędzia AI do kodowania. PyTorch Lightning. Teraz pełna mapa operacji przez pięć ekosystemów.
Socket ujął dynamikę kampanii precyzyjnie: "Po dwóch solidnych tygodniach praktycznie nieustannych ataków, tempo wygląda raczej na celowe i utrzymane niż oportunistyczne."
Nie jest to seria przypadkowych ataków na różne pakiety. To jest systematyczna operacja która testuje różne ekosystemy i wektory wejścia — SAP dla enterprise środowisk, PyTorch Lightning dla infrastruktury AI, Intercom dla SaaS, PHP dla legacy systemów. Każdy wektor daje dostęp do innej kategorii środowisk i poświadczeń.
Wskaźniki kompromitacji
Jeśli którykolwiek z wymienionych pakietów był zainstalowany i importowany w twoich środowiskach:
Sprawdź GitHub pod kątem repozytoriów z opisem "A Mini Shai-Hulud has Appeared" powiązanych z kontami twojej organizacji. Sprawdź pliki .claude/settings.json, .claude/router_runtime.js, .vscode/tasks.json, .github/workflows/format-check.yml — to są ślady propagacji robaka. Przejrzyj commity z opisami chore: update dependencies z okresu 29 kwietnia–1 maja pod kątem nieoczekiwanych zmian.
Rotuj: tokeny GitHub PAT i Actions, tokeny npm, klucze AWS, wszystkie zmienne środowiskowe z poświadczeniami dostępne z zainfekowanych maszyn lub runnerów CI/CD.
Podsumowanie
Mini Shai-Hulud w ciągu trzech dni przekroczył granice między PyPI, npm, Packagist, Ruby Gems i modułami Go. 1800 deweloperów z wykradzionymi poświadczeniami opublikowanymi publicznie. Prawie 10 milionów miesięcznych pobrań dotkniętych pakietów.
Ale liczba która najbardziej opisuje zmianę nie jest w tej kampanii — jest w historii Shai-Hulud jako całości. Wrzesień 2025: pierwsza wersja, setki pakietów. Listopad 2025: Shai-Hulud 2.0, ponad 25 000 repozytoriów. Kwiecień–maj 2026: Mini Shai-Hulud przez pięć ekosystemów jednocześnie.
Każda iteracja jest szersza, szybsza i trudniejsza do zablokowania przez mechanizmy którymi dysponuje ekosystem open source. Dynamiczny C2 przez GitHub, propagacja przez zależności transitive, wykonanie przy imporcie zamiast przy instalacji — każda z tych innowacji odpowiada bezpośrednio na poprzednie mechanizmy obrony.
Źródła
SecurityWeek — pełna mapa operacji z danymi z OX Security: https://www.securityweek.com/1800-hit-in-mini-shai-hulud-attack-on-sap-lightning-intercom/
Security Boulevard / CISO Whisperer — szczegóły dynamicznego C2 przez GitHub: https://securityboulevard.com/2026/05/1800-developers-hit-in-mini-shai-hulud-supply-chain-attack-across-pypi-npm-and-php/
Developer-tech — analiza polyglot environment i AI pipelines jako miękkich celów: https://www.developer-tech.com/news/open-source-registries-mini-shai-hulud-supply-chain-attacks/
Semgrep — reguły YARA i IOC: https://semgrep.dev/blog/2026/malicious-dependency-in-pytorch-lightning-used-for-ai-training/
The Hacker News — pełny kontekst kampanii przez Packagist: https://thehackernews.com/2026/04/pytorch-lightning-compromised-in-pypi.html















































































































Nie nowy atak, tylko naprawiony błąd. Co łatka Gemini CLI mówi o tym, że tryb –yolo w potoku CI/CD to nie jest dobry pomysł