Il malware npm in imgdecode inietta codice in Windows
Il pacchetto malware npm imgdecode utilizza un componente Node.js compilato per scaricare shellcode cifrato, cioè istruzioni progettate per essere eseguite direttamente nella memoria, e iniettarlo in un processo Windows. SafeDep ha scoperto che il file JavaScript di nove righe del pacchetto carica una dynamic-link library (DLL), un file compilato contenente codice eseguibile. Quando un'applicazione Windows richiama require('imgdecode'), la DLL recupera il payload cifrato da GitHub, lo decifra e lo avvia all'interno di un nuovo processo dllhost.exe.
Imgdecode è stato caricato nel registro dei pacchetti npm il 30 settembre 2026 dall'account malfexteste8. Aveva registrato 979 download ed era ancora disponibile al momento della pubblicazione della notizia. La sua release più recente era la versione 1.0.3. SafeDep lo ha collegato a MALFEX, una campagna contro la software supply chain documentata per la prima volta da Checkmarx e CloudSEK. Dal 6 agosto 2023, un operatore sconosciuto ha utilizzato la campagna per pubblicare pacchetti malevoli rivolti a Windows attraverso gli account malfexkkj, malfex_user, malfexteste2, malfexteste3 e malfexteste4.
Nella campagna più ampia erano stati identificati otto pacchetti. Tre fungevano da loader per Overlord RAT; RAT significa remote access trojan, un malware che consente a un operatore di controllare un computer. Altri tre, cdn-img-fetch, img-to-native e native-runner, formavano una catena che installava un data stealer Node.js. Un altro percorso utilizzava un postinstall hook, cioè codice eseguito automaticamente dopo l'installazione di un pacchetto, per contattare un server esterno e recuperare un binary successivo non specificato.
L'operatore sostituiva rapidamente i pacchetti rimossi. Cdn-img-fetch, img-to-native e native-runner 1.0.0 sono comparsi il 26 settembre 2026. npm ha rimosso native-runner e img-to-native alle 16:06 UTC del 28 settembre. Il 30 settembre, imgbundle 1.0.0 è stato pubblicato alle 03:29 in sostituzione di img-to-native, seguito otto minuti dopo da runhelper 1.0.0 in sostituzione di native-runner. Runhelper è stato ritirato dalla pubblicazione alle 16:13. Le versioni 1.0.0 e 1.0.1 di imgdecode sono poi comparse alle 22:32 e alle 23:07. La versione 1.0.2 è seguita il 1º ottobre alle 17:48. npm ha rimosso imgbundle il 7 ottobre alle 23:06 e cdn-img-fetch l'8 ottobre alle 13:03. Imgdecode 1.0.3 è stato pubblicato l'11 ottobre alle 22:09.
La precedente catena di stealer composta da tre pacchetti non si basava su un installation hook. L'esecuzione iniziava invece quando veniva caricato native-runner. Cdn-img-fetch scaricava banner.png dal repository GitHub cavecrew/proj ed estraeva un blocco di dati cifrato. Img-to-native lo decifrava con la key malfexteam2027 e salvava un eseguibile Go come %APPDATA%\Microsoft\Windows\node_runtime_helper.exe. Native-runner avviava quel file, che scaricava setup.exe, chiamato anche movinlike, da 104.234.65[.]75:700.
Runhelper veniva presentato come un'utility per avviare programmi nativi da Node.js, ma il suo vero ruolo era trovare cdn-img-fetch/.runtime/rt.jpg, recuperare lo shellcode dall'immagine, copiarlo nella memoria eseguibile ed eseguirlo tramite Koffi. Koffi è un modulo Foreign Function Interface (FFI) che consente a JavaScript di richiamare codice nativo compilato. SafeDep ha riferito che, sei ore dopo il ritiro di runhelper dalla pubblicazione, l'operatore ha rilasciato imgdecode con una DLL compilata per eseguire lo shellcode. A partire dalla versione 1.0.1, la DLL poteva anche recuperare e decifrare il payload. Le versioni 1.0.1 e 1.0.2 caricavano ancora prima imgbundle, mentre la versione 1.0.3 ha eliminato tale dipendenza e poteva funzionare senza un altro pacchetto MALFEX.
Imgdecode 1.0.0 attendeva che imgbundle collocasse i dati in cdn-img-fetch/.runtime/, leggeva in memoria il file risultante e lo inviava a un addon nativo di Node.js per la decodifica. L'addon è una DLL Microsoft Visual C++ a 64 bit. Controlla se è in esecuzione in un developer terminal, recupera banner.jpg da cavecrew/proj, decifra il contenuto incorporato con la key nif-runtime-2027 e inietta il risultato in dllhost.exe. SafeDep ha inoltre individuato un possibile meccanismo di disattivazione controllato dall'operatore: se il contenuto decifrato inizia con una file signature JPEG o PNG, la DLL si arresta. I ricercatori hanno osservato che la semplice distribuzione di un'immagine ordinaria causerebbe generalmente il fallimento della decifratura prima di questo controllo.
L'account GitHub cavecrew non era più accessibile, ma un'acquisizione di Internet Archive datata 6 ottobre 2026 mostrava che l'immagine conteneva lo stesso downloader basato su Go utilizzato per ottenere lo stealer Node.js e lo strumento di accesso remoto movinlike da 104.234.65[.]75:700. L'applicazione Node.js conteneva inoltre un file di configurazione .env con l'indirizzo command-and-control (C2) 104.234.65[.]75:7007 e una licence key MALFEX. SafeDep ha affermato che ciò indicava l'impiego di un malware builder o di un sistema di licenze per creare i payload.
Prima di raccogliere dati, il malware verifica la presenza di virtual machine, sandbox e programmi di analisi, tra cui Process Monitor e Wireshark. Cerca seed phrase e file con estensione .kdbx, .pem, .ppk e .env. Prende inoltre di mira i browser basati su Chromium, Discord, Telegram, i wallet di criptovalute e applicazioni di gioco tra cui Steam, Epic Games, Riot, Battle.net, Minecraft e Ubisoft. Attraverso una connessione WebSocket al proprio server C2, il malware può ricevere istruzioni per l'esecuzione di comandi, il trasferimento di file, la gestione dei processi, l'accesso agli appunti, l'acquisizione di screenshot e il controllo di mouse e tastiera. Tenta di restare nel computer aggiungendo una Registry Run entry e creando una scheduled task denominata MicrosoftEdgeUpdateService.
Per i team che gestiscono siti web e hosting, l'esposizione immediata riguarda il computer Windows di sviluppo o di build sul quale viene caricata una dipendenza malevola, anziché una vulnerabilità presente in un sito web già distribuito. Il furto di file .env, .pem e .ppk può esporre dati di configurazione e credenziali utilizzati per amministrare applicazioni o infrastrutture. Le organizzazioni che necessitano di assistenza per gli ambienti IT interessati possono prendere in considerazione AEU-I, che fornisce servizi IT, infrastrutturali e di consulenza con la sicurezza come priorità.
Chiunque abbia installato imgdecode o i relativi pacchetti MALFEX dovrebbe considerare il sistema Windows interessato come potenzialmente compromesso. La risposta consigliata consiste nell'isolarlo, esaminare le posizioni di persistenza documentate, sostituire le credenziali da un dispositivo pulito e trasferire le criptovalute in nuovi wallet se nel computer erano conservate seed phrase. La sola rimozione del pacchetto npm non elimina il malware che potrebbe essere già in esecuzione o configurato per avviarsi nuovamente.