Malware w pakiecie axios w npm - jak zabezpieczyć swoje aplikacje?
W In Cloud We Trust na bieżąco monitorujemy krajobraz cyberzagrożeń, aby dostarczać Wam najświeższe informacje i najlepsze praktyki z zakresu bezpieczeństwa chmury oraz kodu. W ostatnich godzinach doszło do jednego z najpoważniejszych ataków na łańcuch dostaw (supply chain attack) w historii ekosystemu Node.js.
Nasz partner biznesowy i dostawca oprogramowania code security, firma Aikido, jako pierwsza poinformowała o krytycznym incydencie: konto głównego twórcy popularnej biblioteki axios zostało przejęte, a hakerzy opublikowali wersje zawierające złośliwe oprogramowanie typu RAT (Remote Access Trojan).
Biorąc pod uwagę, że axios notuje ponad 100 milionów pobrań tygodniowo (do 300 mln wg StepSecurity), skala potencjalnego rażenia jest ogromna. Poniżej przedstawiamy szczegóły ataku, metody weryfikacji infekcji oraz kroki naprawcze.
Najważniejsze informacje o incydencie
- Przejęcie konta i złośliwe wersje: Konto npm głównego twórcy zostało zhakowane. Opublikowano dwie zainfekowane wersje:
axios@1.14.1orazaxios@0.30.4. Zostały one już usunięte z rejestru npm, jednak jeśli pobrałeś je przed interwencją, powinieneś założyć, że Twój system jest skompromitowany. - Wieloplatformowy RAT: Złośliwe wersje wstrzykują ukrytą zależność, która instaluje trojana dającego zdalny dostęp (RAT) atakującym. Działa on na systemach macOS, Windows oraz Linux.
- Zatarcie śladów: Po wykonaniu swojego zadania malware ulega samozniszczeniu - dropper usuwa złośliwy
setup.js, podmieniapackage.jsonna czystą kopię z wersji 4.2.0 i zaciera ślady. Prosta inspekcja folderunode_modulespo fakcie nie wykaże jego obecności. - Dodatkowe zainfekowane pakiety: Oprócz axios, ten sam malware rozprzestrzenia się przez pakiety
@shadanai/openclaworaz@qqbrowser/openclaw-qbot, które wgrywają złośliwy payload tą samą ścieżką C2.
Co dokładnie się wydarzyło?
Chronologia ataku (czas UTC):
- 30 marca, 05:57 - Konto
nrwise(email:nrwise@proton.me), kontrolowane przez atakujących, publikujeplain-crypto-js@4.2.0- czystą kopię bibliotekicrypto-js. Cel: „postarzenie" pakietu, aby uniknąć alertów skanerów wykrywających nowe pakiety. - 30 marca, 23:59 - 18 godzin później
nrwisepublikujeplain-crypto-js@4.2.1ze złośliwym skryptem postinstall w plikusetup.js(4 209 bajtów, dwuwarstwowa obfuskacja: odwrócone Base64 + szyfr XOR z kluczemOrDeR_7077). - 31 marca, 00:21 - Przejęte konto
jasonsaayman(zmieniony email naifstap@proton.me) publikujeaxios@1.14.1z dodaną zależnościąplain-crypto-js@^4.2.1. Publikacja odbywa się ręcznie (skradzionym tokenem npm), z pominięciem CI/CD. - 31 marca, ~01:00 - Publikacja
axios@0.30.4z identyczną złośliwą zależnością. - 31 marca, ~03:15 - npm usuwa obie wersje axios. Otwierany jest
GitHub issue #10604. Żądanie unieważnienia wszystkich tokenów maintainera.
Mechanizm działania malware
Złośliwy skrypt postinstall w plain-crypto-js pobiera ładunek (payload) z serwera C2 (sfrclak[.]com, IP: 142.11.206.73, port 8000) i instaluje złośliwy kod odpowiedni dla danego systemu operacyjnego:
- macOS: Fałszywy demon pamięci podręcznej Apple (
com.apple.act.mondw/Library/Caches/). - Windows: Skrypt PowerShell uruchamiany przez ukryty VBScript. Artefakty:
wt.exew%PROGRAMDATA%, pliki6202033.vbsi6202033.ps1w%TEMP%. - Linux: Skrypt w języku Python (
/tmp/ld.py).
RAT komunikuje się z C2 co 60 sekund i obsługuje polecenia: peinject (uruchomienie binarki), runscript (wykonanie skryptu), rundir (enumeracja katalogów) oraz kill (zakończenie procesu).
Wskaźniki kompromitacji (IOC)
Poniższe dane pozwalają zespołom SOC na szybką identyfikację zagrożenia.
Hasze SHA złośliwych pakietów
# axios@1.14.1
SHA1: 2553649f2322049666871cea80a5d0d6adc700ca
SHA256: 5bb67e88846096f1f8d42a0f0350c9c46260591567612ff9af46f98d1b7571cd
# axios@0.30.4
SHA1: d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71
SHA256: 59336a964f110c25c112bcc5adca7090296b54ab33fa95c0744b94f8a0d80c0f
# plain-crypto-js@4.2.1 (dropper)
SHA1: 07d889e2dadce6f3910dcbc253317d28ca61c766
# Linux RAT payload (ld.py)
SHA256: fcb81618bb15edfdedfb638b4c08a2af9cac9ecfa551af135a8402bf980375cfInfrastruktura C2
- Domena:
sfrclak[.]com - IP:
142.11.206.73, port8000 - Endpoint:
http://sfrclak[.]com:8000/6202033(HTTP POST) - User-Agent RAT:
mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)
Konta atakujących na npm
jasonsaayman(przejęte konto maintainera, email zmieniony naifstap@proton.me)nrwise(konto jednorazowe, emailnrwise@proton.me- autor dropperaplain-crypto-js)
Jak sprawdzić, czy jesteś ofiarą ataku?
Ponieważ złośliwy skrypt usuwa się sam, musisz zweryfikować pliki systemowe oraz zablokowane wersje paczek.
Weryfikacja ręczna
1. Sprawdź zainstalowane wersje axios - przeskanuj swoje paczki oraz pliki lock:
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
grep -A1 '"axios"' package-lock.json | grep -E "1\.14\.1|0\.30\.4"2. Sprawdź ślady po dropperze - nawet po usunięciu skryptu, sam katalog może nadal istnieć:
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENCJALNIE ZAINFEKOWANY"3. Zweryfikuj hasze SHA - porównaj z sekcją IOC powyżej:
shasum node_modules/axios/package.json 2>/dev/null4. Szukaj artefaktów RAT na dysku (w zależności od systemu):
- macOS:
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "SKOMPROMITOWANY" - Windows:
dir "%PROGRAMDATA%\wt.exe" 2>nul && echo SKOMPROMITOWANY - Linux:
ls -la /tmp/ld.py 2>/dev/null && echo "SKOMPROMITOWANY"
Kroki naprawcze (Remediation)
Jeśli weryfikacja przebiegła pozytywnie, natychmiast podejmij poniższe działania:
- Wymuś bezpieczne wersje:
npm install axios@1.14.0 # dla użytkowników wersji 1.x
npm install axios@0.30.3 # dla użytkowników wersji 0.x- Nadpisz złośliwe zależności w
package.json:
{
"dependencies": { "axios": "1.14.0" },
"overrides": { "axios": "1.14.0" },
"resolutions": { "axios": "1.14.0" }
}- Usuń pozostałości i zainstaluj bez skryptów:
rm -rf node_modules/plain-crypto-js
npm install --ignore-scripts- Złota zasada bezpieczeństwa: Jeśli znalazłeś pliki RAT (
com.apple.act.mond,wt.exe,ld.py), nie próbuj ich czyścić. Przebuduj środowisko z czystego, sprawdzonego stanu. - Rotacja poświadczeń: Zmień WSZYSTKIE klucze i sekrety dostępne na zainfekowanej maszynie (tokeny npm, klucze AWS/Azure/GCP, klucze SSH, sekrety CI/CD, zmienne z plików
.env).
Jak zapobiegać atakom na łańcuch dostaw?
Ataki na supply chain stają się coraz bardziej wyrafinowane. Ręczna weryfikacja każdego incydentu po fakcie to jak gaszenie pożaru. W In Cloud We Trust wierzymy w podejście „Shift-Left" i proaktywnie implementujemy metodykę DevSecOps.
Aikido Safe Chain - darmowa ochrona open-source
Aikido Safe Chain to open-source'owy wrapper na npm/yarn/pnpm, który przechwytuje instalację pakietów i weryfikuje je w czasie rzeczywistym z bazą Aikido Intel. Kluczowa funkcja: domyślny wymóg minimalnego „wieku" pakietu wynoszący 48 godzin. Złośliwa wersja plain-crypto-js@4.2.1 została opublikowana zaledwie 18 godzin przed wstrzyknięciem do axios - Safe Chain zablokowałby jej instalację automatycznie, nawet bez wcześniejszej znajomości tego konkretnego zagrożenia.
To oznacza, że nawet darmowe narzędzie Aikido uchroniłoby Cię przed tym atakiem. Dla pełnej ochrony warto jednak rozważyć wdrożenie kompletnej platformy Aikido z asystą naszych inżynierów.
Skonsultuj wdrożenie ochrony z In Cloud We Trust
Aby skutecznie chronić się przed atakami typu supply chain attack w przyszłości, umów się z nami na spotkanie konsultujące wdrożenie platformy Aikido. Aikido, jako inteligentny monitor złośliwego oprogramowania, automatycznie porównuje Twoje zależności z nieustannie aktualizowanym malware feed. W przypadku wykrycia zainfekowanych paczek (takich jak axios@1.14.1 czy ukrytych dropperów jak plain-crypto-js@4.2.1), Aikido natychmiast je oznacza i blokuje ich instalację, zanim zdążą wyrządzić szkody.
Dlaczego warto wdrożyć Aikido z naszą pomocą?
- Pełna widoczność bezpieczeństwa kodu: Błyskawiczna analiza podatności, skanowanie sekretów i ochrona kontenerów.
- Automatyzacja: Blokuj złośliwe potoki CI/CD jeszcze zanim zainfekowane zależności zostaną wdrożone.
- Dostosowanie do Twojej chmury: Eksperci In Cloud We Trust pomogą zintegrować Aikido dokładnie z Twoim ekosystemem AWS, Azure lub GCP.
Zarezerwuj bezpłatną konsultację z inżynierem In Cloud We Trust już dziś i zacznij ufać swojemu środowisku tak samo, jak ufasz chmurze! Zadbaj o bezpieczeństwo zanim wydarzy się kolejny incydent.
Źródła i dalsze informacje
- Aikido Security - oryginalne ogłoszenie incydentu i analiza techniczna malware
- StepSecurity - szczegółowa analiza przejęcia konta i osi czasu ataku
- SafeDep - dogłębna analiza techniczna payload, obfuskacji i RAT
- GitHub issue #10604 - zgłoszenie incydentu w repozytorium axios
Najczęściej zadawane pytania
Jakie wersje axios zawierają malware?
Złośliwe wersje to axios@1.14.1 oraz axios@0.30.4. Obie zostały usunięte z rejestru npm. Bezpieczne wersje to axios@1.14.0 i axios@0.30.3. Jeśli Twój projekt pobrał zainfekowaną wersję przed interwencją npm, powinieneś założyć kompromitację systemu.
Jak sprawdzić czy mój projekt jest zainfekowany?
Uruchom: npm list axios 2>/dev/null | grep -E "1.14.1|0.30.4" oraz sprawdź obecność katalogu node_modules/plain-crypto-js. Na macOS szukaj pliku /Library/Caches/com.apple.act.mond, na Windows — %PROGRAMDATA%\wt.exe, na Linux — /tmp/ld.py. Szczegóły i hasze SHA znajdziesz w sekcji IOC artykułu.
Czym jest Aikido Safe Chain i jak chroni przed atakami supply chain?
Aikido Safe Chain to darmowy, open-source'owy wrapper na npm/yarn/pnpm, który weryfikuje pakiety w czasie rzeczywistym. Domyślnie blokuje pakiety młodsze niż 48 godzin. W przypadku ataku na axios, dropper plain-crypto-js@4.2.1 miał zaledwie 18 godzin — Safe Chain zablokowałby go automatycznie.
Jakie inne pakiety npm zostały zainfekowane w tym ataku?
Oprócz axios, ten sam malware rozprzestrzenia się przez pakiety @shadanai/openclaw (wersje 2026.3.28-2, 2026.3.28-3, 2026.3.31-1, 2026.3.31-2) oraz @qqbrowser/openclaw-qbot (wersja 0.0.130). Oba dostarczają identyczny payload RAT przez to samo C2.
Co to jest RAT i jak działa w kontekście ataku na axios?
RAT (Remote Access Trojan) to złośliwe oprogramowanie dające atakującemu zdalny dostęp do zainfekowanej maszyny. W tym ataku RAT instaluje się przez skrypt postinstall, komunikuje z serwerem C2 co 60 sekund i pozwala na wykonywanie poleceń, uruchamianie binarek oraz enumerację plików. Po instalacji dropper samoczynnie zaciera ślady.
Powiązane artykuły
Ewolucja Zagrożenia: Dlaczego Shai-Hulud 2.0 zmusza nas do ponownego zdefiniowania Bezpieczeństwa Łańcucha Dostaw Oprogramowania
Analiza ataku Shai-Hulud 2.0 na ekosystem npm — 796 skompromitowanych pakietów, dead man's switch i jak OX Security chroni łańcuch dostaw oprogramowania.
SAST i DAST: Kompletny przewodnik po nowoczesnym bezpieczeństwie aplikacji
SAST vs DAST - porównanie metod testowania bezpieczeństwa aplikacji. Tabela różnic, kluczowe korzyści i wskazówki wdrożenia dla zespołów DevSecOps.