Złośliwy pakiet npm „imgdecode” ukrywa loader shellcode w natywnym dodatku Windows - Security Bez Tabu

Złośliwy pakiet npm „imgdecode” ukrywa loader shellcode w natywnym dodatku Windows

Cybersecurity news

Wprowadzenie do problemu / definicja

Ekosystem npm od lat pozostaje jednym z kluczowych celów ataków na łańcuch dostaw oprogramowania. Przypadek pakietu „imgdecode” pokazuje, że cyberprzestępcy coraz częściej odchodzą od prostych i łatwo wykrywalnych skryptów postinstall na rzecz bardziej zaawansowanych technik, takich jak wykorzystanie natywnych dodatków Node.js dla systemu Windows, bibliotek DLL oraz zewnętrznie pobieranego shellcode.

Tego rodzaju kampanie są szczególnie niebezpieczne, ponieważ złośliwa funkcjonalność może zostać uruchomiona dopiero w określonym momencie działania aplikacji. W praktyce utrudnia to zarówno analizę statyczną, jak i wykrywanie oparte wyłącznie na monitorowaniu procesu instalacji zależności.

W skrócie

Pakiet „imgdecode” został powiązany z kampanią MALFEX wymierzoną w użytkowników npm pracujących w środowiskach Windows. Złośliwy moduł ukrywał loader w skompilowanym dodatku natywnym, który po załadowaniu próbował pobrać zaszyfrowany shellcode, odszyfrować go i uruchomić w nowym procesie systemowym.

Według opublikowanych ustaleń pakiet pojawił się w rejestrze 30 września 2026 roku i do momentu wykrycia został pobrany setki razy. Kampania miała być powiązana z wcześniejszymi złośliwymi pakietami używanymi do dostarczania stealera oraz komponentów zdalnego dostępu.

  • celem byli użytkownicy npm i systemów Windows,
  • złośliwy kod ukryto w natywnym dodatku Node.js,
  • ładunek końcowy był pobierany etapowo z zewnętrznej infrastruktury,
  • kampania wpisuje się w szerszy model ataków supply chain oznaczanych jako MALFEX.

Kontekst / historia

Incydent z „imgdecode” nie jest odosobnionym przypadkiem, lecz kolejnym etapem szerszej operacji prowadzonej przeciwko ekosystemowi npm. Wcześniejsze aktywności przypisywane tej samej kampanii wskazywały na używanie wielu pakietów pełniących różne role w łańcuchu infekcji, od downloaderów po moduły dostarczające stealer i narzędzia zdalnej kontroli hosta.

Charakterystycznym elementem tej operacji była rotacja pakietów po ich wykryciu lub usunięciu. Operatorzy publikowali zamienniki o podobnym przeznaczeniu, zachowując zbliżone schematy działania i nazewnictwo sugerujące legalne zastosowanie. To klasyczny wzorzec dla aktywnych kampanii atakujących łańcuch dostaw, w których infrastruktura dystrybucyjna jest szybko odbudowywana po działaniach obronnych.

W poprzednich odsłonach tej samej aktywności wykorzystywano pakiety odpowiedzialne za pobieranie zasobów, uruchamianie natywnych binariów oraz dostarczanie kolejnych etapów malware. Oznacza to, że „imgdecode” należy analizować nie jako pojedynczy incydent, ale jako element rozwijanej i adaptacyjnej kampanii.

Analiza techniczna

Najbardziej interesującym elementem pakietu „imgdecode” jest sposób ukrycia złośliwej logiki. Zamiast klasycznego skryptu instalacyjnego wykorzystano niewielki kod JavaScript, którego zadaniem było zainicjowanie natywnego komponentu przeznaczonego dla Windows. Po uruchomieniu biblioteka DLL próbowała pobrać zaszyfrowany ładunek z zewnętrznego repozytorium, a następnie odszyfrować go i wstrzyknąć do nowego procesu „dllhost.exe”.

Taka technika daje atakującym kilka korzyści operacyjnych. Po pierwsze, złośliwa aktywność nie musi wystąpić na etapie instalacji pakietu, co ogranicza skuteczność prostych mechanizmów wykrywających podejrzane hooki npm. Po drugie, natywny dodatek znacząco utrudnia analizę prowadzoną wyłącznie na poziomie kodu JavaScript lub TypeScript. Po trzecie, etapowe pobieranie końcowego payloadu pozwala zmieniać ładunek bez konieczności modyfikowania samego pakietu w rejestrze.

W ustaleniach dotyczących kampanii MALFEX pojawia się również schemat polegający na pobraniu spreparowanego obrazu, wyodrębnieniu z niego zaszyfrowanych danych, odszyfrowaniu ich i zapisaniu na dysku w postaci binarium Go, które następnie pobiera właściwy stealer. W niektórych wariantach obrazy PNG i JPG były wykorzystywane jako nośnik ukrytego ładunku lub danych pośrednich, co dodatkowo utrudnia analizę ruchu i klasyfikację artefaktów.

Końcowe malware miało realizować funkcje typowe dla nowoczesnych stealerów i implantów post-exploitation. W opisywanym łańcuchu uwzględniano między innymi mechanizmy antyanalityczne, wykrywanie środowisk wirtualnych i narzędzi badawczych, kradzież danych z przeglądarek opartych na Chromium, komunikatorów, portfeli kryptowalutowych i plików zawierających sekrety. Dodatkowo próbka miała obsługiwać komunikację z serwerem C2, zdalne wykonywanie poleceń, transfer plików, przechwytywanie schowka, wykonywanie zrzutów ekranu oraz interakcję z myszą i klawiaturą.

  • ukrycie loadera w natywnym dodatku dla Windows,
  • pobranie zaszyfrowanego shellcode z zewnętrznej infrastruktury,
  • odszyfrowanie i iniekcja do procesu „dllhost.exe”,
  • możliwość dynamicznej zmiany końcowego payloadu,
  • funkcje kradzieży danych i zdalnej kontroli hosta.

Konsekwencje / ryzyko

Najwyższe ryzyko dotyczy środowisk deweloperskich Windows, stacji roboczych programistów oraz agentów CI działających na Windows. Kompromitacja nie ogranicza się do samej aplikacji Node.js, ponieważ złośliwy kod może uzyskać dostęp do danych użytkownika, poświadczeń, sesji przeglądarkowych oraz zasobów wykorzystywanych w procesie wytwarzania oprogramowania.

Z perspektywy organizacji taki incydent należy traktować jako pełne naruszenie łańcucha dostaw. Jeżeli pakiet był obecny w pipeline budowania, zagrożone mogą być tokeny publikacyjne, sekrety CI/CD, klucze SSH, pliki .env oraz dane dostępowe do usług chmurowych. Dodatkowo pobieranie kolejnych etapów malware z zewnętrznej infrastruktury oznacza, że zakres skutków mógł zmieniać się w czasie.

Ryzyko obejmuje także dalsze rozprzestrzenianie kompromitacji na inne systemy, zwłaszcza jeśli przejęte zostały konta deweloperskie, menedżery haseł lub dane sesyjne używane do pracy z repozytoriami kodu i panelami administracyjnymi.

Rekomendacje

Organizacje powinny w pierwszej kolejności ustalić, czy pakiet „imgdecode” lub inne elementy kampanii MALFEX występowały w plikach lock, pamięci podręcznej menedżera pakietów, obrazach agentów buildowych oraz na stacjach programistów. W przypadku potwierdzenia instalacji należy założyć możliwość pełnej kompromitacji hosta i podjąć działania jak przy incydencie wysokiego ryzyka.

  • przeprowadzić przegląd historii zależności npm i ustalić, które projekty pobierały podejrzane pakiety,
  • odizolować hosty Windows, na których pakiet został zainstalowany lub uruchomiony,
  • zabezpieczyć artefakty i logi do analizy śledczej,
  • przeprowadzić rotację haseł, tokenów API, kluczy SSH, sekretów CI/CD i poświadczeń przeglądarkowych,
  • sprawdzić mechanizmy persystencji, w tym klucze Run i zaplanowane zadania,
  • zweryfikować ruch wychodzący do nieznanych hostów i kanałów komunikacji,
  • przeskanować pamięć i system EDR pod kątem iniekcji do procesów systemowych, szczególnie „dllhost.exe”,
  • odbudować środowiska deweloperskie z zaufanych obrazów zamiast ograniczać się do usunięcia pakietu.

W dłuższej perspektywie warto wdrożyć polityki ograniczające uruchamianie natywnych dodatków z niezweryfikowanych pakietów, skanowanie zależności pod kątem ryzyka supply chain, kontrolę pochodzenia pakietów oraz monitorowanie anomalii w drzewie zależności.

Podsumowanie

Przypadek „imgdecode” pokazuje, że ataki na łańcuch dostaw npm stają się coraz bardziej ukryte, modularne i odporne na podstawowe metody wykrywania. Wykorzystanie natywnego dodatku Windows, zewnętrznie pobieranego shellcode oraz wieloetapowego łańcucha infekcji istotnie zwiększa poziom zagrożenia dla organizacji korzystających z Node.js.

Dla zespołów bezpieczeństwa oznacza to konieczność traktowania zależności programistycznych jako pełnoprawnego wektora ataku na endpointy, sekrety i procesy developerskie. Ochrona łańcucha dostaw nie może już być postrzegana wyłącznie jako problem jakości kodu, ale jako centralny element cyberodporności organizacji.

Źródła

  1. The Hacker News — MALFEX npm Package 'imgdecode’ Hides Shellcode Loader in Windows Native Addon — https://thehackernews.com/2026/10/malfex-npm-package-imgdecode-hides.html
  2. The Hacker News — Eight Malicious npm Packages Downloaded 40,767 Times Deliver Overlord RAT and Stealer — https://thehackernews.com/2026/10/eight-malicious-npm-packages-downloaded.html