Dopo il metodo di attacco Trojan Source, basato sull'uso di simboli Unicode che alterano l'ordine di visualizzazione del testo bidirezionale, è stata pubblicata un'altra tecnica per l'inserimento di azioni nascoste, applicabile al codice JavaScript. Il nuovo metodo si basa sull'uso del simbolo unicode "ㅤ" (codice 0x3164, "HANGUL FILLER"), che appartiene alla categoria delle lettere, ma non ha contenuto visibile. La categoria Unicode a cui appartiene questo simbolo è consentita a partire dalla specifica ECMAScript 2015 per l'uso nei nomi delle variabili JavaScript, il che consente di creare variabili invisibili o nuove variabili indistinguibili da altre variabili nei popolari editor di codice, come Notepad++ e VS Code.
Come esempio viene presentato il codice per la piattaforma Node.js, in cui mediante una variabile composta da un singolo simbolo "ㅤ" è nascosto un backdoor che permette di eseguire il codice specificato dall'attaccante: app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // in realtà è indicato come «const { timeout,ㅤ \u3164}» const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // dopo la virgola segue il simbolo \u3164 ];
A prima vista, tramite il parametro esterno viene passato solo il valore del timeout, mentre l'array dei comandi da eseguire contiene un elenco fisso innocuo. Ma in realtà, dopo la variabile timeout, viene assegnato il valore di un'altra variabile invisibile con il codice del simbolo \u3164, che è anch'essa inclusa nell'array dei comandi eseguibili. Pertanto, con una tale costruzione, per attivare il retro e eseguire il proprio codice, l'attaccante può inviare una richiesta di tipo "https://host:8080/network_health?= comando".
Come ulteriore esempio viene presentato il simbolo "ǃ" (ALVEOLAR CLICK), che può essere utilizzato per creare l'apparenza di un punto esclamativo. Ad esempio, l'espressione "if(environmentǃ=ENV_PROD){" in esecuzione su Node.js 14 sarà sempre vera, poiché non sta effettuando un confronto, ma assegnando alla variabile "environmentǃ" il valore ENV_PROD. Tra i simboli unicode ingannevoli, si notano anche "/", "−", "+", "⩵", "❨", "⫽", "꓿" e "∗".
Fonte: opennet.ru
