Gli hacker utilizzano il runtime JavaScript Bun per diffondere NWHStealer

| 6 maggio 2026
Gli hacker utilizzano il runtime JavaScript Bun per diffondere NWHStealer

Nella nostraprecedente ricerca abbiamo analizzato un Windows che abbiamo denominatoNWHStealer. Gli autori di questo programma sono costantemente alla ricerca di nuovi metodi per distribuirlo. Nel corso delle nostre attività di monitoraggio, abbiamo notato che gli autori utilizzano un runtime JavaScript chiamato Bun per facilitarne la distribuzione.

Bun è un toolkit JavaScript e TypeScript completo, affidabile e veloce, progettato come alternativa moderna e ad alte prestazioni a Node.js. È stato sviluppato da zero per semplificare lo sviluppo web moderno, integrando diversi strumenti essenziali in un unico eseguibile. 

La sua relativa novità lo rende inoltre attraente per gli hacker. Bun non è ancora stato ampiamente rilevato nelle campagne di malware e consente loro di incorporare codice dannoso in file eseguibili di dimensioni maggiori, che potrebbero risultare più difficili da individuare. 

Che cos'è NWHStealer e cosa può fare? 

NWHStealer è unostealer basato su Rust, diffuso tramite una serie di esche e metodi di distribuzione. Tra questi figurano script Node.js, programmi di installazione MSI e, più recentemente, caricatori JavaScript realizzati con il runtime Bun.  

Spesso viene ospitato su piattaforme legittime come GitHub, GitLab, MediaFire, Itch.io e SourceForge, il che gli permette di mimetizzarsi tra i normali software e aumenta le probabilità che gli utenti lo scarichino. Gli autori degli attacchi continuano a creare nuovi profili e esche per diffondere il programma di furto di credenziali. 

Una volta installato sul PC, NWHStealer è in grado di: 

  • Raccogliere informazioni di sistema, tra cui il sistema operativo, l'hardware, il software di sicurezza, i dati degli utenti e i dispositivi collegati. 
  • Rubare dati da browser, estensioni e portafogli di criptovalute. 
  • Rubare dati da diverse applicazioni, tra cui programmi FTP come FileZilla e CoreFTP e app di messaggistica come Steam e Discord. 
  • Inserire codice dannoso nei processi del browser ed eseguire payload aggiuntivi (ad es. XMRig).
  • Tentativo di aggirare il Controllo account utente (UAC). 
  • Garantire la continuità tramite attività pianificate. 
  • Ottieni i nuovi indirizzi di comando e controllo (C2) da Telegram. 

Come stare al sicuro 

Gli hacker adattano continuamente le loro tecniche e l'uso di strumenti più recenti come Bun dimostra come cerchino di anticipare i sistemi di rilevamento. 

NWHStealer è particolarmente preoccupante per via della sua ampia diffusione e del tipo di dati a cui prende di mira. I dati rubati dai browser, le password salvate e le informazioni relative ai portafogli di criptovalute possono portare rapidamente all'appropriazione indebita di account, a perdite finanziarie e a ulteriori violazioni della sicurezza. 

Ecco alcuni semplici consigli per stare al sicuro: 

  • download solo dai siti web ufficiali. 
  • Presta attenzione ai download da piattaforme come GitHub, SourceForge o siti di condivisione file, a meno che tu non ti fidi della fonte. 
  • Gli hacker continuano a creare nuovi profili per diffondere questo programma di furto di dati su diverse piattaforme. Quando scarichi qualcosa da siti di hosting file o blog, controlla il profilo, la reputazione e la data di creazione del profilo, dello sviluppatore o dell'editore. 
  • Controlla la struttura degli archivi per verificare che il contenuto, le immagini e i file txt corrispondano a ciò che hai scaricato. Controlla anche il nome dell'archivio: di solito seguono schemi riconoscibili. 
  • Controlla l'autore e la firma del file prima di eseguirlo. 


Consiglio da esperto: installa Malwarebytes Browser Guard per bloccare i siti dannosi prima che vengano caricati. 


Analisi tecnica

Il nuovo metodo di distribuzione: Bun JavaScript Runtime 

Secondo il suo sito ufficiale, Bun è un toolkit completo per JavaScript, TypeScript e JSX. È stato sviluppato da zero in Zig e si basa sul motore JavaScriptCore di Apple, con particolare attenzione alla rapidità di avvio e al ridotto consumo di memoria.

Il Bun è composto da quattro elementi principali: 

  • Runtime JavaScript:un runtime JavaScript progettato per sostituire direttamente Node.js. 
  • Package Manager: un'alternativa veloce a npm. 
  • Test Runner: uneseguitore integrato compatibile con Jest che esegue i test molto più velocemente rispetto agli eseguitori standard. 
  • Bundler: sostituiscestrumenti come Webpack, Vite o esbuild per il packaging del codice. 

Nelle recenti campagne abbiamo rilevato che NWHStealer viene diffuso tramite un pacchetto Bun JavaScript Runtime.  

Come abbiamo visto nella nostra precedente ricerca, per avviare la catena di infezione vengono utilizzati file esca relativi a giochi e altri software. Tra i nomi dei file ZIP rilevati in queste recenti campagne figurano: 

  • Software e trucchi relativi ai videogiochi, quali: 
    • MOUSE_PI_Trainer_v1.0.zip
    • FiveM Mod.zip
    • VampireCrawlers_Trainer_v1.0.zip
    • MagicalPrincess_Trainer_v1.0.zip 
    • TerraTechLegion_Trainer_v1.0.zip 
  • Altri software quali: 
    • TradingView-Activation-Script-0.9.zip 
    • AutoTune 2026.zip
    • Metatune by Slate Digital 2026.zip
    • GoGoTv_Plus.zipAutodesk.zip

Nel caso analizzato in questo articolo, la catena di contagio ha inizio con un archivio contenente Installer.exe, che incorpora il codice JavaScript integrato nel runtime di Bun. 

La cartella "DW" contiene un altro programma di caricamento, denominato dw.exe. Questo caricatore per autoiniezione è simile a quello analizzato in precedenza, ma presenta una routine di decrittografia diversa. Questo caricatore non è presente in tutti i file ZIP analizzati. 

Il file ZIP dannoso contiene due programmi di caricamento
Il file ZIP dannoso contiene due programmi di caricamento 

Il Readme.txt Il file richiede all'utente di avviare manualmente dw.exe se il principale .exe il file non funziona correttamente. Ciò offre all'autore dell'attacco due modalità per distribuire il programma di furto di dati qualora il server C2 del caricatore principale Bun fosse offline. Il caricatore in dw.exe funziona indipendentemente dal caricatore JavaScript di Bun. 

Il file Readme contenuto nell'archivio ZIP
Il file Readme contenuto nell'archivio ZIP
La schermata di configurazione dei Build Tools visualizzata all'avvio di dw.exe
La configurazione errata di Build Tools visualizzata se dw.exe viene avviato

In questo articolo non analizziamo dw.exe, poiché si tratta di una variante dei caricatori precedenti. Ci concentriamo invece sul caricatore JavaScript eseguito con il runtime JavaScript di Bun. 

Analisi del caricatore JavaScript  

Il codice JavaScript eseguito dal runtime Bun JavaScript si trova all'interno del .bun sezione ed è offuscato.  

La sezione .bun contenente il codice JavaScript offuscato
Il .bun sezione contenente il codice JavaScript offuscato 

Il codice dannoso è presente in due parti del codice: 

  • sysreq.js: esegue i controlli anti-virtualizzazione utilizzando un sistema a punti. 
  • memload.js: comunica con il server C2, esegue la decrittografia e carica la fase successiva. 
Punto di ingresso del caricatore JavaScript

Il programma di caricamento esegue diversi comandi PowerShell CIM (Common Information Model) e WMI (Windows Instrumentation) per rilevare gli ambienti virtuali. Esistono diversi controlli relativi al numero di CPU, allo spazio su disco, alla risoluzione dello schermo, ai dispositivi USB, ai produttori e ai prodotti hardware, al numero di software installati, alla presenza di cartelle specifiche come quelle del browser, al numero di processi in esecuzione e al nome utente. Viene implementato un sistema di punteggio e, in base a questo, il loader decide se proseguire con l’infezione o interromperla.

Per rilevare un ambiente virtuale, il programma di caricamento esegue più di 10 comandi PowerShell, tra cui: 

  • 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 

I risultati vengono confrontati con diverse stringhe, ad esempio:

  • Indicatori di virtualizzazione: QEMU, SEABIOS, Bochs, VirtualBox, VMware, VirtualBox, KVM, Xen, Parallels, VirtIO, VMBus, Red Hat, EDK II
  • Nome utente sandbox: sandbox, malware, virus, sample, vmuser, wdagutilityaccount, defaultuser0
  • MAC ad ambienti virtuali

Le stringhe vengono decodificate utilizzando l'operazione XOR e la decodifica Base64; sono presenti array di tuple, ciascuna delle quali contiene le stringhe crittografate e una chiave utilizzata per la decodifica XOR. 

Dati crittografati con chiavi XOR
Dati crittografati con chiavi XOR 

Diverse funzioni gestiscono la decrittografia delle stringhe, tra cui una che decrittografa la configurazione utilizzata nella comunicazione C2. Configurazione parziale: 

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

Il caricatore recupera e invia una richiesta iniziale all'endpoint https://C2-server/api/report con i dati crittografati relativi al sistema compromesso: 

  • Indirizzo IP pubblico ottenuto tramite una richiesta a api.ipify.org. 
  • Informazioni di sistema 
  • Risultato anti-VM 
  • Screenshot codificato in Base-64 
  • Data e ora 

Quindi effettua due richieste HTTP GET: 

  • https://C2-server/api/status?v={BUILD_ID}, per ottenere il seme utilizzato per la derivazione della chiave AES. 
  • https://C2-server/api/update?v={BUILD_ID}, per ottenere il payload crittografato con nonce AES e tag di autenticazione. 

La fase successiva viene decrittografata utilizzando AES-256-CBC, con i dati AES restituiti dal C2 e caricati tramite un loader ad autoiniezione utilizzando le seguenti API: 

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

Queste API Win32 vengono eseguite tramite il modulo Bun bun:ffi, che consente a JavaScript di richiamare librerie native. 

Al termine di questo processo, nei casi analizzati è stato installato NWHStealer. 

Indicatori di compromesso (IOC) 

Domini 

whale-ether[.]pro: Server C2 di NWH Stealer 

cosmic-nebula[.]cc: Server C2 di NWH Stealer 

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

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

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

Hash 

d3a896f450561b2546b418b469a8e10949c7320212eb1c72b48e2b1e37c34ba5 

96fe4ddfe256dc9d2c6faea7c18e2583cd9d9c0099a4ad2cf082f569ee8379f4 

3710fb27d2032ef1eb1252ebf5c4dd516d2b2c0a83fb82c664c89e504b990fa9 

33d07aa24b217f27df6a483295c817da198e12511a6989bcc6b917feaf8e491d 

5427b4cefb329ed0e9585b3ce58a2788baf87e3b0c7221373f9bbd5f32c85b62 

308da9f49ffa1d1744e428b567792ab22712159974e9da8d8e0414ecd81de93e 

021838f30a43026084978bce187c165c6b640d8d474ec009d48078d21ec62025 

c8e96b55f13435c4b43b7209d2403f1a0e0f9deb05edc50e0f777430be693b07 

0614c4cc6375ab6bdcdd2dfa913a67d32c3e8be9b95a4a2aa09bb131b98191c8 

0020999b2e3e4d1b2cfb69e4df9440d3ce05d508573889fdc12b724ce75a0cd8 

0fa42df08cc467ec52b2d388b5575114a8ec067d13f6b1a653ec33fe879f88ca 

15f79980650393d182f81cd6e389210568aa1f5f875e515efe6cb9485d64b7fb 

20454ba58d509300fd694ae6159db4efa1b7ff965f98c29e7d087e20f96578c1 


Premio "Scelta della redazione" di CNET 2026

Secondo CNET.Leggi la loro recensione


Informazioni sull'autore

Gabriele è un ingegnere specializzato nella ricerca sul malware che ama combattere il malware. Quando non è impegnato in questo, lo si può trovare a godersi la natura, l'arte e gli animali.