
Wprowadzenie do problemu / definicja
Kampania Ghost to kolejny przykład zagrożenia wymierzonego w łańcuch dostaw oprogramowania, w którym cyberprzestępcy wykorzystują zaufanie do ekosystemu npm. Złośliwe pakiety podszywają się pod przydatne biblioteki i narzędzia programistyczne, a ich rzeczywistym celem jest wyłudzenie uprawnień administracyjnych, pobranie kolejnych komponentów malware oraz kradzież danych o wysokiej wartości.
W praktyce oznacza to, iż zwykła instalacja zależności może stać się punktem wejścia do kompromitacji stacji roboczej dewelopera. Szczególnie niebezpieczne jest to, iż atak łączy techniki socjotechniczne z wieloetapowym łańcuchem infekcji, co utrudnia jego szybkie wykrycie.
W skrócie
Badacze zidentyfikowali co najmniej siedem pakietów npm powiązanych z kampanią Ghost. Pakiety były publikowane w sposób sugerujący legalne zastosowania, a ich instalacja imitowała standardowy proces działania npm.
- atak wykorzystywał fałszywe komunikaty instalacyjne, by skłonić ofiarę do podania hasła sudo lub administratora,
- po uzyskaniu poświadczeń malware pobierał kolejne etapy z zewnętrznej infrastruktury,
- celem były między innymi portfele kryptowalutowe, hasła, klucze SSH oraz tokeny deweloperskie,
- kampania szczególnie koncentrowała się na środowiskach macOS i projektach opartych o Node.js.
Kontekst / historia
Ataki na publiczne rejestry pakietów nie są nowością, jednak kampania Ghost pokazuje dojrzalszy model działania przestępców. Zamiast ograniczać się do prostego złośliwego skryptu, operatorzy budują pozory wiarygodności, publikując biblioteki o nazwach przypominających typowe komponenty wykorzystywane w codziennej pracy programistów.
W analizowanej aktywności widoczne są też podobieństwa do wcześniejszych obserwacji łączonych z nazwą GhostClaw. Chodzi przede wszystkim o wykorzystanie repozytoriów i projektów budujących reputację przez dłuższy czas, a następnie aktywujących złośliwe funkcje we właściwym momencie. To wpisuje się w szerszy trend, w którym atakujący coraz lepiej rozumieją workflow nowoczesnych zespołów developerskich, w tym użycie automatyzacji, skryptów shellowych i narzędzi AI.
Analiza techniczna
Techniczny schemat kampanii Ghost opiera się na kilku etapach. Pierwszy z nich to loader ukryty w pakiecie npm, który pełni jednocześnie rolę mechanizmu socjotechnicznego. Zamiast natychmiast uruchamiać jawnie złośliwe działania, pakiet generuje komunikaty mające wyglądać jak normalne logi instalacyjne.
Następnie użytkownik otrzymuje informację o rzekomym problemie z uprawnieniami zapisu lub konieczności dokończenia instalacji z użyciem wyższych uprawnień. W tym momencie ofiara jest nakłaniana do podania hasła administratora lub sudo. To najważniejszy element całego ataku, ponieważ wiele osób pracujących w środowiskach developerskich nie uznaje takich żądań za całkowicie nietypowe.
Po przechwyceniu poświadczeń uruchamiany jest kolejny etap infekcji. Loader kontaktuje się z infrastrukturą zewnętrzną, aby pobrać adres adekwatnego ładunku oraz dane potrzebne do jego odszyfrowania lub uruchomienia. Taki model znacznie utrudnia analizę statyczną, ponieważ najważniejsze komponenty nie muszą być obecne bezpośrednio w samym pakiecie npm.
Końcowy malware odpowiada za kradzież danych i komunikację z serwerem sterującym. Według analiz zagrożenie może wykradać informacje z przeglądarek, portfeli kryptowalutowych, kluczy SSH, konfiguracji chmurowych oraz tokenów wykorzystywanych w narzędziach developerskich. W części wariantów wykorzystywano także skrypty setup.js i postinstall.js, dzięki czemu złośliwe działania były lepiej wtopione w standardowe procesy ekosystemu Node.js.
Istotnym elementem operacji było również maskowanie śladów. Badacze zwracali uwagę na czyszczenie terminala po wykonaniu kluczowych kroków oraz prezentowanie komunikatów o pomyślnej instalacji, mimo iż w tle działały już procesy odpowiedzialne za eksfiltrację danych.
Konsekwencje / ryzyko
Ryzyko wynikające z kampanii Ghost jest bardzo wysokie, ponieważ nie ogranicza się do pojedynczej infekcji na stacji roboczej. Przejęcie kluczy SSH, tokenów CI/CD, poświadczeń przeglądarkowych czy sekretów chmurowych może stać się punktem wyjścia do dalszej kompromitacji repozytoriów kodu, pipeline’ów buildów, środowisk testowych i produkcyjnych.
W organizacjach rozwijających aplikacje Web3 lub przechowujących aktywa cyfrowe dodatkowym zagrożeniem jest utrata dostępu do portfeli kryptowalutowych. Co ważne, choćby szybkie wykrycie i usunięcie pakietu nie rozwiązuje problemu, jeżeli wcześniej doszło do wycieku sekretów. Takie dane pozostają wartościowe dla napastników do momentu pełnej rotacji.
Z perspektywy obrony szczególnie niepokojące jest połączenie kilku klas zagrożeń naraz: kompromitacji supply chain, kradzieży poświadczeń i wieloetapowego malware. To wskazuje na operację zaprojektowaną z myślą o skali, automatyzacji i długotrwałej użyteczności.
Rekomendacje
Organizacje powinny potraktować ten incydent jako sygnał do zaostrzenia kontroli nad zależnościami zewnętrznymi i procesem instalacji pakietów. Samo zaufanie do popularnego rejestru nie jest już wystarczającym zabezpieczeniem.
- ograniczyć instalację pakietów do zatwierdzonych źródeł i prywatnych mirrorów,
- stosować allowlisty dla zależności używanych w projektach produkcyjnych,
- monitorować użycie skryptów preinstall, postinstall i podobnych hooków,
- wykrywać próby uruchamiania procesów shellowych, pobierania zdalnych komponentów i wyłudzania haseł,
- unikać używania sudo podczas instalacji bibliotek, jeżeli nie jest to formalnie wymagane,
- regularnie rotować tokeny deweloperskie, klucze SSH i sekrety chmurowe,
- monitorować endpointy macOS i Linux pod kątem nietypowych procesów uruchamianych przy instalacji npm,
- szkolić programistów, iż prośba o hasło administratora podczas instalacji biblioteki JavaScript powinna być traktowana jako sygnał alarmowy.
Jeżeli istnieje podejrzenie kontaktu z podejrzanym pakietem, należy natychmiast odizolować host, zabezpieczyć artefakty incydentu, unieważnić aktywne sesje i przeprowadzić pełną rotację wszystkich sekretów, do których system mógł mieć dostęp. Samo odinstalowanie pakietu nie powinno być uznawane za wystarczającą reakcję.
Podsumowanie
Kampania Ghost pokazuje, iż ataki na ekosystem npm stają się coraz bardziej zaawansowane i celowane. Połączenie fałszywych logów instalacyjnych, wyłudzania hasła sudo, pobierania zewnętrznych komponentów i kradzieży danych wysokiej wartości sprawia, iż zagrożenie wykracza poza prosty incydent malware.
Najważniejszy wniosek dla organizacji jest jasny: proces instalacji zależności musi być traktowany jako istotna powierzchnia ataku. Bez dodatkowych kontroli, monitoringu i edukacji zespołów developerskich choćby pojedynczy pakiet może stać się początkiem poważnego incydentu bezpieczeństwa.
Źródła
- The Hacker News — https://thehackernews.com/2026/03/ghost-campaign-uses-7-npm-packages-to.html
- ReversingLabs — https://www.reversinglabs.com/blog/ghost-campaign-malicious-npm-packages-target-crypto-wallets-and-developer-credentials
- JFrog Security Research — https://jfrog.com/blog/ghostclaw-malware-campaign-targets-macos-developers-via-github-and-npm/
- Jamf Threat Labs — https://www.jamf.com/blog/ghostclaw-macos-infostealer-github-ai-workflows/
- Panther — https://panther.com/blog/malicious-npm-packages-ghost-campaign-analysis




