# CanisterWorm: samorozprzestrzeniający się robak w łańcuchu dostaw npm po ataku na Trivy
Atakujący po skompromitowaniu Trivy rozpozieli robaka CanisterWorm, który zaraził dziesiątki pakietów npm. Złośliwy kod wykorzystuje kontenery ICP blockchainu Internet Computer do trwałego serwera C2. To pierwsze udokumentowane nadużycie ICP do dostępu do payloadu, co zapewnia zdecentralizowaną odporność na blokady.
Mechanizm zarażania i rozprzestrzeniania
Łańcuch ataku zaczyna się od postinstall-haka w skompromitowanych pakietach. Hak uruchamia loader, który instaluje backdoor w Pythonie. Backdoor łączy się z kontenerem ICP, aby pobrać URL kolejnej ładunki.
Kontener ICP implementuje metody get_latest_link, http_request i update_link. Ta ostatnia pozwala kontrolerowi zmieniać URL w czasie rzeczywistym, aktualizując pliki wykonywalne na wszystkich zainfekowanych hostach bez przerywania działania.
Backdoor sprawdza kontener co 50 minut z fałszywym User-Agent. Jeśli URL zawiera youtube.com, implant przechodzi w tryb uśpienia. Aktywacja następuje po przełączeniu na rzeczywisty payload; stare procesy kontynuują pracę równolegle.
Trwałość jest zapewniona przez usługę systemd „pgmon", udającą monitorowanie PostgreSQL. Dyrektywa Restart=always restartuje backdoor po 5 sekundach od zakończenia.
Zaatakowane pakiety:
- 28 w zakresie @EmilGroup;
- 16 w zakresie @opengov;
- @teale.io/eslint-config;
- @airtm/uuid-base32;
- @pypestream/floating-ui-dom.
Socket wykryła 141 złośliwych artefaktów w ponad 66 unikalnych pakietach.
Ewolucja CanisterWorm ku pełnej automatyzacji
W wersjach @teale.io/eslint-config 1.8.11–1.8.12 zmutowana odmiana integruje kradzież tokenów npm w index.js. Funkcja findNpmTokens() skanuje środowisko na etapie postinstall i uruchamia deploy.js jako proces w tle do samorozprzestrzeniania.
Deploy.js publikuje złośliwe wersje we wszystkich dostępnych pakietach za pomocą skradzionych tokenów. Robak, prawdopodobnie wygenerowany przez AI z technologią Vibe, nie maskuje kodu.
Aktualny payload w ICP to testowy ciąg „hello123", co wskazuje na fazę weryfikacji łańcucha przed pełną atakiem.
Podobny mechanizm z youtube.com-check znaleziono w trojanizowanym Trivy 0.69.4 poprzez sysmon.py, odwołujący się do tego samego kontenera ICP.
Porównanie z poprzednimi kampaniami
CanisterWorm podąża za wzorcem Shai-Hulud (wrzesień): skompromitowanie tinycolor rozprzestrzeniło się na ponad 40 pakietów, a następnie robak zaraził ponad 300 za pomocą NpmModule.updatePackage i TruffleHog do walidacji kont.
Sha1-Hulud (listopad) dotknął ponad 25 000 repozytoriów: skrypt preinstall setup_bun.js wykrywał środowisko Bun, uruchamiając bun_environment.js do kradzieży danych.
| Kampania | Zaatakowane pakiety | Mechanizm rozprzestrzeniania | Narzędzia kradzieży |
|--------------|---------------------|------------------------------------|---------------------|
| Shai-Hulud | 300+ | NpmModule.updatePackage | TruffleHog |
| Sha1-Hulud | 25 000+ | preinstall/setup_bun.js | bun_environment |
| CanisterWorm| 66+ | postinstall/deploy.js + ICP C2 | findNpmTokens |
Co ważne
- Pierwsze wykorzystanie kontenerów ICP do C2 w malware: decentralizacja utrudnia takedown.
- Automatyczne rozprzestrzenianie: kradzież tokenów + deploy.js zamienia instalację w wektor zarażania CI/CD i maszyn developerskich.
- Odporność: systemd z Restart=always + procesy równoległe + dynamiczny update_link.
- Maskowanie: usługi jako pgmon, tryb uśpienia na youtube.com.
- Skala: od Trivy do 141 artefaktów; ewolucja ku pełnej automatyzacji bez ręcznego deploy.
Firmy Aikido Security, Endor Labs, JFrog i Wiz potwierdzają: to przejście od pojedynczej kompromitacji do wykładniczego zachowania worm w ekosystemie npm.
— Editorial Team
Brak komentarzy.