В огромном количестве компиляторов обнаружена уязвимость, позволяющая скрыть вредоносный код

Автор: Юрий Станиславский, 02 ноября 2021, 12:14
В огромном количестве компиляторов обнаружена уязвимость, позволяющая скрыть вредоносный код

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

Источник: trojansourcezdnet

Для тех, кто хочет знать больше:

Подписывайтесь на наш нескучный канал в Telegram, чтобы ничего не пропустить.

Поделиться