У величезній кількості компіляторів виявлена вразливість, що дозволяє приховати шкідливий код
Експерти Кембриджського університету оприлюднили інформацію про небезпечну вразливість (CVE-2021-42574), яка стосується практично всіх сучасних компіляторів вихідного коду. Стаття Trojan Source описує підступну атаку, яка дозволяє хакерам ховати шкідливий код у вихідному коді різних програм.
Атака заснована на тому, як компілятори обробляють унікальні ідентифікатори, що використовуються для визначення орієнтації тексту - зліва направо чи справа наліво. Слабкість полягає в алгоритмі Unicode Bidi, який дозволяє використовувати разом слова, написані праворуч наліво та зліва направо. Завдяки цьому алгоритму можна комбінувати арабські та англійські слова. Це дозволяє читати текст, написаний справа наліво, зліва направо та навпаки.
У деяких випадках можливостей алгоритму Unicode Bidi недостатньо для зміни способу відображення цих слів, і у цих випадках використовуються спеціальні керуючі символи. Однак, якщо в одному рядку поєднуються слова з різним напрямком тексту, то за допомогою цих символів, що управляють, можна змінити напрям читання компілятором цього тексту і, наприклад, зробити так, щоб рядки, які виглядають як коментарі, працювали як виконуваний код.
Використовуючи цей метод, можна додати шкідливу інструкцію до звичайного вихідного коду, а текст цієї інструкції зробити невидимим під час перегляду коду за допомогою наступного коментаря. Це призведе до вставлення зовсім інших символів, які можуть бути довільним кодом. Кінцевий вихідний код залишається семантично коректним, але після компіляції відбувається зовсім інше.
Під час перегляду та аналізу такого вихідного коду програміст побачить код із коментарями, які не викликають жодних підозр, але компілятор чи інтерпретатор оберне логічний порядок символів, і безневинний коментар перетвориться на додатковий код, вставлений у програму. Помилка є практично у всіх компіляторах - для мов програмування C, C++ (gcc і clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go і Python; у різних популярних редакторах коду, включаючи VS Code, Emacs, Atom, а також в інтерфейсах перегляду вихідного коду в репозиторіях GitHub, Gitlab, BitBucket та всіх продуктів Atlassian.
Джерело: trojansource, zdnet