Эксперты Кембриджского университета опубликовали информацию об опасной уязвимости (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.

Источник: gagadget.com