File vuoti, minacce nascoste: l’ascesa furtiva del malware JavaScript a larghezza zero
Sottotitolo: Un nuovo strumento proof-of-concept, InvisibleJS, trasforma file apparentemente vuoti in codice eseguibile, mettendo in luce falle enormi nella sicurezza della supply chain del software.
Immagina di aprire un file JavaScript e trovare… niente. Nessun codice, nessun commento, solo una pagina bianca. Ma sotto quell’apparente vuoto, un codice malevolo è pronto a colpire. Non è fantascienza: è la gelida realtà svelata da un nuovo strumento chiamato InvisibleJS, che arma caratteri Unicode invisibili per nascondere codice pienamente funzionante in bella vista.
Fatti rapidi
- InvisibleJS codifica JavaScript in caratteri Unicode a larghezza zero, facendo apparire i file vuoti agli esseri umani.
- Il codice nascosto resta eseguibile, supportando sia ambienti JavaScript tradizionali sia moderni.
- La tecnica di steganografia potrebbe aggirare revisioni manuali del codice e scanner di sicurezza automatizzati.
- I file diventano fino a 24 volte più grandi, offrendo un indizio sottile per il rilevamento.
- Gli esperti di sicurezza avvertono di un possibile impiego in attacchi alla supply chain e di iniezione di codice.
La steganografia dietro il silenzio
InvisibleJS, sviluppato dall’utente GitHub oscarmine, è più di un semplice hack ingegnoso: è un campanello d’allarme per la comunità della sicurezza. Lo strumento sfrutta la steganografia Unicode, codificando ogni bit del codice sorgente JavaScript in caratteri a larghezza zero: Zero Width Space (U+200B) per lo zero, Zero Width Non-Joiner (U+200C) per l’uno. Il risultato? File che appaiono completamente vuoti in qualsiasi editor di testo standard, ma che prendono vita negli ambienti di runtime.
Lo strumento offre due versioni distinte. La versione 1 è pensata per sistemi legacy e moduli CommonJS, usando il famigerato metodo eval() per l’esecuzione sincrona. È compatibile con Node.js e supporta variabili chiave come require e module.exports. La versione 2, invece, è costruita per i moderni ES Modules, utilizzando import dinamici asincroni e supportando persino await a livello top-level. Entrambe le versioni includono un minuscolo “bootstrap loader” che decodifica ed esegue al volo il payload invisibile.
Per gli attaccanti, questa tecnica è un sogno. Il codice malevolo può essere contrabbandato in repository open source, pacchetti della supply chain, oppure iniettato in file altrimenti innocui-eludendo completamente gli occhi indiscreti dei revisori manuali. Gli strumenti di sicurezza automatizzati, che spesso scansionano parole chiave sospette o pattern di codice, vengono ingannati con la stessa facilità.
Il rilevamento non è impossibile, ma è complicato. Il segnale più evidente è una dimensione del file stranamente grande: poiché ogni bit viene codificato come un carattere Unicode multi-byte, i file si gonfiano a oltre venti volte la loro dimensione originale. Ma a meno che i team di sicurezza non stiano cercando specificamente anomalie Unicode a larghezza zero, questi file fantasma potrebbero passare inosservati.
I ricercatori di sicurezza sottolineano la natura duplice di InvisibleJS: se da un lato è una dimostrazione affascinante delle possibilità steganografiche, dall’altro è un monito netto. Le organizzazioni devono adattarsi-implementando strumenti di analisi del codice che segnalino l’uso di caratteri a larghezza zero, monitorando dimensioni dei file anomale e formando gli sviluppatori a riconoscere questa nuova razza di minaccia invisibile.
Conclusione: il codice che non puoi vedere
InvisibleJS è al tempo stesso una meraviglia tecnica e un incubo per la sicurezza. Man mano che i cybercriminali diventano sempre più inventivi, i difensori devono imparare a guardare oltre il visibile-perché a volte, il codice più pericoloso è quello che non puoi vedere affatto.
WIKICROOK
- Steganografia: La steganografia nasconde messaggi segreti o codice all’interno di file di uso comune, come immagini o audio, rendendo le informazioni nascoste difficili da rilevare.
- Zero: Una vulnerabilità zero-day è una falla di sicurezza nascosta, sconosciuta al produttore del software, senza una correzione disponibile, il che la rende altamente preziosa e pericolosa per gli attaccanti.
- CommonJS: CommonJS è un sistema di moduli JavaScript usato in Node.js, che consente agli sviluppatori di suddividere il codice in moduli riutilizzabili e manutenibili con require e module.exports.
- ES Module (ESM): ES Module (ESM) è lo standard JavaScript moderno per il codice modulare, che abilita la sintassi import/export, il caricamento asincrono e una sicurezza migliorata tra ambienti diversi.
- Supply: Un attacco alla supply chain prende di mira fornitori o servizi di terze parti per compromettere più organizzazioni sfruttando relazioni esterne fidate.




