Hakerzy wykorzystują środowisko uruchomieniowe JavaScript o nazwie Bun do rozprzestrzeniania złośliwego oprogramowania NWHStealer

| 6 maja 2026 r.
Hakerzy wykorzystują środowisko uruchomieniowe JavaScript o nazwie Bun do rozprzestrzeniania złośliwego oprogramowania NWHStealer

W naszychpoprzednich badaniach przeanalizowaliśmy program Windows , który śledzimy pod nazwąNWHStealer. Sprawcy stojący za tym programem nieustannie poszukują nowych metod jego rozpowszechniania. Podczas naszych działań wykrywczych zauważyliśmy, że wykorzystują oni środowisko uruchomieniowe JavaScript o nazwie Bun do jego dystrybucji.

Bun to sprawdzony, szybki i wszechstronny zestaw narzędzi do pracy z JavaScriptem i TypeScriptem, zaprojektowany jako nowoczesny i wydajny zamiennik Node.js. Został stworzony od podstaw z myślą o uproszczeniu nowoczesnego tworzenia stron internetowych poprzez połączenie kilku niezbędnych narzędzi w jednym pliku wykonywalnym. 

Jego stosunkowo nowa natura sprawia, że jest on atrakcyjny dla hakerów. Bun nie pojawił się jeszcze powszechnie w kampaniach złośliwego oprogramowania, a umożliwia on hakerom umieszczanie złośliwego kodu w większych plikach wykonywalnych, które mogą być trudniejsze do wykrycia. 

Czym jest NWHStealer i do czego służy? 

NWHStealer tooparty na języku Rust program służący do kradzieży danych, rozpowszechniany za pomocą różnych przynęt i metod dystrybucji. Należą do nich skrypty Node.js, instalatory MSI, a od niedawna także moduły ładujące JavaScript stworzone przy użyciu środowiska uruchomieniowego Bun.  

Często jest on udostępniany na legalnych platformach, takich jak GitHub, GitLab, MediaFire, Itch.io i SourceForge, co pozwala mu wtopić się w zwykłe oprogramowanie i zwiększa prawdopodobieństwo, że użytkownicy go pobiorą. Atakujący wciąż tworzą nowe profile i przynęty, aby rozprzestrzeniać ten program wykradający dane. 

Po zainstalowaniu na komputerze program NWHStealer umożliwia: 

  • Zbierz informacje o systemie, w tym o systemie operacyjnym, sprzęcie, oprogramowaniu zabezpieczającym, danych użytkownika i podłączonych urządzeniach. 
  • Wykradaj dane z przeglądarek, rozszerzeń i portfeli kryptowalutowych. 
  • Wykradają dane z różnych aplikacji, w tym z programów FTP, takich jak FileZilla i CoreFTP, oraz z komunikatorów, takich jak Steam i Discord. 
  • Wprowadzić złośliwy kod do procesów przeglądarki i uruchomić dodatkowe ładunki (np. XMRig).
  • Próba obejścia funkcji Kontrola konta użytkownika (UAC). 
  • Zapewnij ciągłość działania dzięki zaplanowanym zadaniom. 
  • Pobierz nowe adresy systemu dowodzenia i kontroli (C2) z serwisu Telegram. 

Jak zachować bezpieczeństwo 

Hakerzy nieustannie dostosowują swoje metody, a stosowanie nowych narzędzi, takich jak Bun, pokazuje, jak starają się wyprzedzać systemy wykrywania. 

Program NWHStealer budzi szczególne obawy ze względu na skalę jego rozpowszechnienia oraz rodzaj danych, które atakuje. Skradzione dane przeglądarki, zapisane hasła oraz informacje o portfelach kryptowalutowych mogą szybko doprowadzić do przejęcia kont, strat finansowych i dalszych naruszeń bezpieczeństwa. 

Oto kilka prostych sposobów na zachowanie bezpieczeństwa: 

  • Pobieraj oprogramowanie wyłącznie z oficjalnych stron internetowych. 
  • Zachowaj ostrożność przy pobieraniu plików z serwisów takich jak GitHub, SourceForge czy serwisów do udostępniania plików, chyba że masz pewność co do źródła. 
  • Hakerzy wciąż tworzą nowe konta, by rozpowszechniać to złośliwe oprogramowanie na różnych platformach. Pobierając pliki z serwisów hostingowych lub blogów, sprawdź profil, reputację oraz datę utworzenia konta, dewelopera lub wydawcy. 
  • Sprawdź strukturę archiwów, czy zawartość, obrazy i pliki tekstowe są zgodne z tym, co pobrałeś. Sprawdź również nazwę archiwum – zazwyczaj mają one rozpoznawalne wzorce. 
  • Przed uruchomieniem pliku sprawdź jego wydawcę i podpis. 


Wskazówka dla zaawansowanych: Zainstaluj Malwarebytes Browser Guard , aby blokować złośliwe strony, zanim się załadują. 


Analiza techniczna

Nowa metoda dystrybucji: Bun JavaScript Runtime 

Jak podaje oficjalna strona internetowa, Bun to kompleksowy zestaw narzędzi do pracy z JavaScriptem, TypeScriptem i JSX. Został stworzony od podstaw w języku Zig i oparty jest na silniku JavaScriptCore firmy Apple, przy czym kładzie się w nim nacisk na szybkie uruchamianie i niskie zużycie pamięci.

Bun składa się z czterech głównych elementów: 

  • Środowisko uruchomieniowe JavaScript:środowisko uruchomieniowe JavaScript zaprojektowane jako bezpośredni zamiennik Node.js. 
  • Menedżer pakietów:szybka alternatywa dla npm. 
  • Test Runner:wbudowany modułuruchamiający testy, zgodny z biblioteką Jest, który wykonuje testy znacznie szybciej niż standardowe moduły uruchamiające. 
  • Bundler: zastępujenarzędzia takie jak Webpack, Vite czy esbuild w zakresie pakowania kodu. 

W ostatnich kampaniach wykryliśmy, że program NWHStealer jest rozpowszechniany za pośrednictwem pakietu Bun JavaScript Runtime.  

Jak wynika z naszych wcześniejszych badań, do zainicjowania łańcucha infekcji wykorzystywane są przynęty w postaci oprogramowania związanego z grami oraz innego rodzaju oprogramowania. Wśród nazw plików ZIP wykrytych w ostatnich kampaniach znalazły się między innymi: 

  • Oprogramowanie związane z grami oraz kody, takie jak: 
    • MOUSE_PI_Trainer_v1.0.zip
    • FiveM Mod.zip
    • VampireCrawlers_Trainer_v1.0.zip
    • MagicalPrincess_Trainer_v1.0.zip 
    • TerraTechLegion_Trainer_v1.0.zip 
  • Inne programy, takie jak: 
    • TradingView-Activation-Script-0.9.zip 
    • AutoTune 2026.zip
    • Metatune by Slate Digital 2026.zip
    • GoGoTv_Plus.zipAutodesk.zip

W przypadku analizowanym w niniejszym artykule łańcuch zakażeń rozpoczyna się od archiwum zawierającego Installer.exe, który zawiera kod JavaScript dołączony do środowiska uruchomieniowego Bun. 

Folder „DW” zawiera kolejny program ładujący o nazwie dw.exe. Ten moduł ładujący do samoczynnego wstrzykiwania jest podobny do tego, który analizowaliśmy wcześniej, ale posiada inną procedurę deszyfrującą. Moduł ten nie występuje we wszystkich analizowanych plikach ZIP. 

Złośliwy plik ZIP zawiera dwa moduły ładujące
Złośliwy plik ZIP zawiera dwa moduły ładujące 

The Readme.txt plik prosi użytkownika o ręczne uruchomienie dw.exe jeśli główny .exe plik nie działa poprawnie. Dzięki temu atakujący ma dwie możliwości rozpowszechniania programu kradnącego dane, jeśli serwer C2 głównego modułu ładującego Bun jest niedostępny. Moduł ładujący w dw.exe działa niezależnie od modułu ładującego JavaScript Bun. 

Plik Readme znajdujący się w archiwum ZIP
Plik Readme znajdujący się w archiwum ZIP
Fałszywy ekran konfiguracji narzędzi kompilacji wyświetlany po uruchomieniu pliku dw.exe
Wyświetlana jest fałszywa konfiguracja narzędzi kompilacji, jeśli dw.exe zostaje uruchomiony

W tym artykule nie analizujemy dw.exe, ponieważ jest to odmiana poprzednich modułów ładujących. Skupiamy się natomiast na module ładującym JavaScript uruchamianym w środowisku uruchomieniowym Bun JavaScript. 

Analiza modułu ładującego JavaScript  

Kod JavaScript wykonywany przez środowisko uruchomieniowe Bun JavaScript znajduje się wewnątrz pliku .bun w sekcji i jest zaszyfrowany.  

Sekcja .bun zawierająca zaszyfrowany kod JavaScript
The .bun sekcja zawierająca zaszyfrowany kod JavaScript 

Złośliwy kod został umieszczony w dwóch fragmentach kodu: 

  • sysreq.js: przeprowadza kontrole zabezpieczeń przed wirtualizacją w oparciu o system punktacji. 
  • memload.js: komunikuje się z serwerem C2, odszyfrowuje dane i ładuje kolejny etap. 
Punkt wejścia modułu ładującego JavaScript

Program ładujący uruchamia szereg poleceń PowerShell CIM (Common Information Model) oraz WMI (Windows Instrumentation) w celu wykrycia środowisk wirtualnych. Istnieją różne mechanizmy kontroli związane z liczbą procesorów, miejscem na dysku, rozdzielczością ekranu, urządzeniami USB, producentami sprzętu i produktami, liczbą zainstalowanego oprogramowania, obecnością określonych folderów, takich jak foldery przeglądarki, liczbą uruchomionych procesów oraz nazwą użytkownika. Zaimplementowano system punktacji i na podstawie tego wyniku moduł ładujący decyduje, czy kontynuować infekcję, czy ją przerwać.

Aby wykryć środowisko wirtualne, moduł ładujący wykonuje ponad 10 poleceń PowerShell, takich jak: 

  • Get-CimInstance -ClassName Win32_DiskDrive | Select-Object Model  
  • Get-CimInstance -ClassName Win32_PhysicalMemory | Select-Object Manufacturer,Speed  
  • Get-CimInstance -ClassName Win32_BIOS | Select-Object Manufacturer  
  • Get-CimInstance -ClassName Win32_BaseBoard | Select-Object Manufacturer,Product  
  • Get-CimInstance -ClassName Win32_DiskDrive | Select-Object PNPDeviceID 
  • (Get-Process -ErrorAction SilentlyContinue).Count 

Wyniki są porównywane z różnymi ciągami znaków, na przykład:

  • Wskaźniki wirtualizacji: qemu, seabios, bochs, vbox, vmware, virtualbox, kvm, xen, parallels, virtio, vmbus, Red Hat, EDK II
  • Nazwa użytkownika w środowisku testowym: sandbox, malware, virus, sample, vmuser, wdagutilityaccount, defaultuser0
  • MAC ze środowiskami wirtualnymi

Ciągi znaków są odszyfrowywane przy użyciu operacji XOR i dekodowania Base64; istnieją tablice krotek, z których każda zawiera zaszyfrowane ciągi znaków oraz klucz używany do odszyfrowania metodą XOR. 

Dane zaszyfrowane za pomocą kluczy XOR
Dane zaszyfrowane za pomocą kluczy XOR 

Kilka funkcji zajmuje się odszyfrowywaniem ciągów znaków, w tym jedna, która odszyfrowuje konfigurację używaną w komunikacji C2. Fragment konfiguracji: 

C2 server: https://silent-harvester.cc
BUILD_ID: 0ddbfec60307
C2 Path: /api/status, /api/update

Moduł ładujący pobiera i wysyła początkowe żądanie do punktu końcowego https://C2-server/api/report zawierające zaszyfrowane dane dotyczące systemu, który padł ofiarą ataku: 

  • Adres IP publiczny uzyskany poprzez wysłanie żądania do serwisu api.ipify.org. 
  • Informacje o systemie 
  • Wynik testu Anti-VM 
  • Zrzut ekranu zakodowany w formacie Base-64 
  • Sygnatura czasowa 

Następnie wysyła dwa żądania HTTP typu GET: 

  • https://C2-server/api/status?v={BUILD_ID}, aby uzyskać klucz siewny wykorzystywany do wyprowadzania klucza AES. 
  • https://C2-server/api/update?v={BUILD_ID}, aby uzyskać zaszyfrowaną treść przy użyciu generatora losowego AES oraz znacznika uwierzytelniającego. 

Kolejny etap jest odszyfrowywany przy użyciu algorytmu AES-256-CBC, przy czym dane AES zwracane przez serwer C2 są ładowane za pomocą modułu samowstrzykującego przy użyciu następujących interfejsów API: 

  • VirtualAlloc 
  • VirtualProtect 
  • LoadLibraryA 
  • GetProcAddress 
  • RtlAddFunctionTable
  • CreateThread 
  • SearchPathA 

Te interfejsy API Win32 są uruchamiane za pośrednictwem modułu Bun bun:ffi, co umożliwia JavaScriptowi wywoływanie bibliotek natywnych. 

W wyniku tego procesu w analizowanych przypadkach zainstalowano program NWHStealer. 

Wskaźniki kompromisu (IOC) 

Domeny 

whale-ether[.]pro: Serwer C2 programu NWH Stealer 

cosmic-nebula[.]cc: Serwer C2 programu NWH Stealer 

silent-harvester[.]cc: Serwer Bun Loader C2 

silent-orbit[.]cc: Serwer Bun Loader C2 

support-onion[.]club: Serwer Bun Loader C2 

Hash 

d3a896f450561b2546b418b469a8e10949c7320212eb1c72b48e2b1e37c34ba5 

96fe4ddfe256dc9d2c6faea7c18e2583cd9d9c0099a4ad2cf082f569ee8379f4 

3710fb27d2032ef1eb1252ebf5c4dd516d2b2c0a83fb82c664c89e504b990fa9 

33d07aa24b217f27df6a483295c817da198e12511a6989bcc6b917feaf8e491d 

5427b4cefb329ed0e9585b3ce58a2788baf87e3b0c7221373f9bbd5f32c85b62 

308da9f49ffa1d1744e428b567792ab22712159974e9da8d8e0414ecd81de93e 

021838f30a43026084978bce187c165c6b640d8d474ec009d48078d21ec62025 

c8e96b55f13435c4b43b7209d2403f1a0e0f9deb05edc50e0f777430be693b07 

0614c4cc6375ab6bdcdd2dfa913a67d32c3e8be9b95a4a2aa09bb131b98191c8 

0020999b2e3e4d1b2cfb69e4df9440d3ce05d508573889fdc12b724ce75a0cd8 

0fa42df08cc467ec52b2d388b5575114a8ec067d13f6b1a653ec33fe879f88ca 

15f79980650393d182f81cd6e389210568aa1f5f875e515efe6cb9485d64b7fb 

20454ba58d509300fd694ae6159db4efa1b7ff965f98c29e7d087e20f96578c1 


Nagroda „Wybór redakcji” serwisu CNET 2026

Według serwisu CNET.Przeczytaj ich recenzję


O autorze

Gabriele jest inżynierem ds. badań nad złośliwym oprogramowaniem, który uwielbia walkę z tym zagrożeniem. Kiedy nie zajmuje się tym, można go spotkać, jak cieszy się przyrodą, sztuką i zwierzętami.