
Co znajdziesz w tym artykule?
Wprowadzenie do problemu / definicja
Ekosystem npm pozostaje jednym z kluczowych elementów nowoczesnego łańcucha dostaw oprogramowania, ale jednocześnie stanowi atrakcyjny cel dla cyberprzestępców. Najnowszy incydent pokazuje, że złośliwy pakiet może skutecznie podszyć się pod legalne narzędzie deweloperskie i wykorzystać zaufanie użytkowników do instalatorów CLI.
W analizowanym przypadku pakiet udający instalator OpenClaw został użyty do wdrożenia rozbudowanego malware na systemach macOS. Zagrożenie łączyło funkcje trojana zdalnego dostępu oraz stealera, umożliwiając kradzież haseł, danych przeglądarkowych, poświadczeń deweloperskich i innych wrażliwych informacji.
W skrócie
Badacze bezpieczeństwa wykryli złośliwy pakiet npm o nazwie @openclaw-ai/openclawai, opublikowany 3 marca 2026 roku. Pakiet wykorzystywał mechanizm postinstall, aby uruchomić łańcuch infekcji już podczas instalacji i prezentował fałszywy interfejs przypominający legalny instalator OpenClaw.
Po uruchomieniu malware wyświetlał spreparowany monit o hasło systemowe, pobierał drugi etap z serwera sterującego i instalował go w tle. Końcowy ładunek zbierał dane z przeglądarek, pęku kluczy, portfeli kryptowalutowych, kluczy SSH, środowisk chmurowych i komunikatorów, a dodatkowo zapewniał trwałość oraz możliwość zdalnej kontroli systemu.
Kontekst / historia
Ataki na łańcuch dostaw oprogramowania w npm nie należą do nowych, jednak ten przypadek wyróżnia się poziomem dopracowania. Zamiast prostego skryptu przechwytującego tokeny lub zmienne środowiskowe, operatorzy przygotowali wieloetapowy scenariusz infekcji połączony z socjotechniką i próbą uzyskania podwyższonych uprawnień na macOS.
Atakujący wykorzystali legalne mechanizmy ekosystemu npm. Skrypty instalacyjne, takie jak postinstall, są powszechnie używane do konfiguracji pakietów po instalacji, a pole bin w pliku package.json pozwala rejestrować wykonywalne polecenia CLI. W tym przypadku oba elementy zostały użyte do uruchomienia złośliwego kodu pod pozorem normalnego procesu wdrożenia.
Analiza techniczna
Według ustaleń badaczy złośliwy pakiet wykorzystywał skrypt postinstall, aby ponownie zainstalować się globalnie. Następnie właściwość bin kierowała wykonanie do pliku scripts/setup.js, który pełnił funkcję pierwszego etapu infekcji i sprawiał wrażenie legalnego instalatora narzędzia CLI.
Pierwszy etap prezentował użytkownikowi przekonujący, fałszywy interfejs instalacyjny z animowanymi paskami postępu. Taki zabieg miał obniżyć czujność ofiary i przygotować ją do zaakceptowania sfabrykowanego monitu o autoryzację oraz podania hasła systemowego.
Równolegle malware pobierał zaszyfrowany drugi etap z infrastruktury C2, odszyfrowywał go lokalnie, zapisywał do pliku tymczasowego i uruchamiał jako odłączony proces potomny działający w tle. Po uruchomieniu plik tymczasowy był usuwany, co ograniczało liczbę artefaktów i utrudniało analizę powłamaniową. Jeśli złośliwe oprogramowanie nie miało dostępu do wybranych katalogów chronionych przez mechanizmy prywatności macOS, nakłaniało użytkownika do nadania Terminalowi uprawnień Full Disk Access.
Drugi etap łączył funkcje stealera i RAT, oferując szeroki zestaw możliwości operacyjnych.
- kradzież danych z lokalnego pęku kluczy oraz baz iCloud Keychain,
- pozyskiwanie haseł, cookies, danych kart płatniczych i formularzy autouzupełniania z przeglądarek opartych na Chromium,
- kradzież danych z aplikacji i rozszerzeń portfeli kryptowalutowych,
- wyciąganie fraz seed i kluczy prywatnych,
- kradzież kluczy SSH,
- pozyskiwanie poświadczeń do AWS, Azure, Google Cloud, Kubernetes, Dockera i GitHuba,
- zbieranie danych z Apple Notes, iMessage, Safari i Mail po uzyskaniu rozszerzonych uprawnień.
Po zebraniu informacje były archiwizowane i eksfiltrowane wieloma kanałami. Malware wspierał zarówno bezpośrednie przesyłanie danych do serwera sterującego, jak i wykorzystanie usług zewnętrznych jako kanałów pomocniczych, co zwiększało odporność operacji na zakłócenia.
Szczególnie niebezpieczna była funkcja klonowania sesji przeglądarkowych. Złośliwe oprogramowanie uruchamiało Chromium w trybie headless z istniejącym profilem użytkownika, co mogło umożliwić przejęcie aktywnej, już uwierzytelnionej sesji bez potrzeby znajomości hasła czy omijania MFA podczas logowania. Dodatkowo malware obsługiwał zdalne wykonywanie poleceń, pobieranie kolejnych ładunków, przesyłanie plików, proxy SOCKS5 i monitorowanie schowka pod kątem danych wrażliwych.
Konsekwencje / ryzyko
Ten incydent ma wysoką wagę operacyjną, ponieważ kompromitacja stacji roboczej dewelopera może bardzo szybko doprowadzić do przejęcia dostępu do repozytoriów kodu, systemów CI/CD, rejestrów pakietów oraz środowisk chmurowych. Kradzież danych z pęku kluczy i przeglądarek otwiera napastnikom drogę do dalszej ekspansji w infrastrukturze organizacji.
Dla użytkowników macOS szczególnie groźne jest połączenie socjotechniki z próbą uzyskania hasła systemowego i nadania Full Disk Access. Taki model działania pozwala obejść część natywnych ograniczeń systemu i zwiększa skalę możliwej kradzieży danych.
- utrata poświadczeń uprzywilejowanych,
- przejęcie sesji do usług chmurowych i deweloperskich,
- kradzież kodu źródłowego i sekretów aplikacyjnych,
- utrata aktywów kryptowalutowych,
- ryzyko kolejnych ataków supply chain z użyciem skradzionych kont i tokenów.
Istotne jest również to, że infekcja była inicjowana już na etapie instalacji pakietu. Użytkownik nie musiał wykonywać dodatkowych działań poza zaufaniem do pozornie legalnego komponentu, co czyni ten scenariusz szczególnie skutecznym w środowiskach developerskich.
Rekomendacje
Organizacje rozwijające oprogramowanie powinny potraktować ten incydent jako kolejny sygnał ostrzegawczy dotyczący bezpieczeństwa łańcucha dostaw. Ochrona nie może ograniczać się wyłącznie do skanowania kodu aplikacji, lecz powinna obejmować także kontrolę zależności, zachowania instalatorów oraz ochronę stacji roboczych programistów.
- ograniczyć instalację pakietów npm z niezweryfikowanych źródeł i egzekwować użycie zatwierdzonych rejestrów pośredniczących,
- monitorować i blokować pakiety wykorzystujące ryzykowne skrypty
preinstall,installipostinstall, - wdrożyć automatyczne skanowanie pakietów open source przed dopuszczeniem ich do użycia w środowiskach deweloperskich i CI/CD,
- stosować zasadę minimalnych uprawnień na stacjach roboczych deweloperów,
- ograniczać nadawanie Full Disk Access aplikacjom terminalowym,
- rotować poświadczenia po każdym podejrzeniu kompromitacji, w tym tokeny GitHub, klucze SSH, sekrety chmurowe i dane sesyjne,
- wykrywać anomalie sieciowe związane z pobieraniem kolejnych etapów malware i komunikacją z C2,
- korzystać z EDR/XDR zdolnych do identyfikacji nietypowych procesów potomnych Node.js oraz prób dostępu do danych przeglądarek i pęku kluczy,
- szkolić deweloperów, aby weryfikowali autorów pakietów, historię publikacji i nietypowe żądania haseł systemowych.
W przypadku podejrzenia użycia tego pakietu należy natychmiast odizolować host, zabezpieczyć artefakty procesowe i sieciowe, przeanalizować historię instalacji npm, usunąć zainfekowane komponenty oraz przeprowadzić pełną rotację wszystkich potencjalnie ujawnionych sekretów.
Podsumowanie
Złośliwy pakiet @openclaw-ai/openclawai pokazuje, że współczesne zagrożenia w npm wykraczają daleko poza proste kampanie kradzieży tokenów. To przykład dobrze zaprojektowanego ataku na łańcuch dostaw, który łączy wiarygodną imitację instalatora, kradzież hasła systemowego, wieloetapowe wdrożenie malware oraz szeroki zestaw funkcji RAT i stealera.
Dla zespołów bezpieczeństwa, DevSecOps i administratorów środowisk developerskich to wyraźny sygnał, że kontrola zależności, monitoring skryptów instalacyjnych oraz ochrona stacji roboczych programistów muszą stać się priorytetem operacyjnym. Nawet pojedynczy zainfekowany pakiet może bowiem otworzyć drogę do kompromitacji znacznie szerszej części organizacji.
Źródła
- The Hacker News — https://thehackernews.com/2026/03/malicious-npm-package-posing-as.html
- npm Docs: package.json — https://docs.npmjs.com/cli/v11/configuring-npm/package-json
- npm Docs: Scripts — https://docs.npmjs.com/cli/v11/using-npm/scripts