Зараженные исходники

Исследователи из Кембриджского университета Николас Буше и Росс Андерсон представили работу, раскрывшую уязвимости Unicode, которые хакеры могут использовать в исходном коде программного обеспечения таким образом, чтобы подмена была незаметна для человеческого глаза: уязвимость двунаправленного письма и уязвимость использования омоглифов в именах функций. 

Уязвимость, получившая идентификатор CVE-2021-42574, заключается в двунаправленном алгоритме Bidi в спецификации Unicode до версии 14.0, обычно применяемом в языках с чтением справа налево (например, арабский или иврит). Злоумышленник может использовать специальные управляющие символы Unicode для модификации программного кода на уровне логики таким образом, что изменения будут заметны только компиляторам и интерпретаторам, но незаметны визуально, что затрудняет их обнаружение. При помощи этой уловки можно изменить порядок символов исходного кода таким образом, чтобы переопределить его логику. Росс Андерсон отмечает, что атака работает против языков программирования C, C++, C#, JavaScript, Java, Rust, Go и Python.

Вторая раскрытая уязвимость – CVE-2021-42694 – обнаружена в определениях символов в той же спецификации Unicode. Она позволяет злоумышленнику создавать идентификаторы исходного кода, такие как имена функций, с использованием омоглифов – графически похожих, но разных по значению лексем. Заменяя латинские буквы на похожие символы из других наборов семейства Unicode (например, изменяя латинскую «K» на кириллическую «К»), злоумышленник может создать функцию-омоглиф, которая внешне похожа на исходную, но на самом деле содержит вредоносный код, который затем может быть добавлен в проект с открытым исходным кодом и не вызовет подозрений. Исследователи отмечают, что такая атака может иметь серьезные последствия, если затронет общую функцию, используемую другим ПО.

Андрей Романов, ведущий инженер ИЦ Angara Professional Assistance, поделился мнением относительно работы исследователей.

«Это очень интересная атака, привлекающая внимание в первую очередь своей универсальностью. Однако мы считаем, что опасность данной уязвимости несколько завышена. Чтобы воспользоваться этой уязвимостью, злоумышленнику потребуется прямой доступ к рабочим станциям разработчиков, системам управления исходным кодом, репозиториям или автоматизации CI/CD», – заявил эксперт. По его словам, если злоумышленник уже получил подобный уровень доступа к системам управления, хранения или анализа исходного кода, это повлечет гораздо более серьезные проблемы, чем могут из себя представлять уязвимости CVE-2021-42574 или CVE-2021-42694. 

Андрей Романов обратил внимание, что злоумышленник, эксплуатирующий данную уязвимость, может оказаться сотрудником компании, имеющим вполне легальный доступ к исходному коду. Известно, что от подобного рода инсайда невозможно полностью защититься. Гарантией может выступить только абсолютная лояльность сотрудников и доверительная атмосфера в коллективе. 

Некоторые разработчики на данный момент уже выпустили обновленный инструментарий для своих языков программирования, сообщил Андрей Романов. В частности, уже вышла версия Rust 1.56.1, а также Red Hat подготовила диагностический скрипт на Python. Прочие разработчики готовы выпустить патчи и обновления своих инструментов редактирования, анализа и компилирования кода в ближайшее время. 

«Поэтому, помимо соблюдения стандартных протоколов ИБ, разумно по возможности максимально оперативно обновиться до последних версий инструментария, устанавливать необходимые патчи по мере их выхода и проверить свои текущие и завершенные проекты на наличие данной уязвимости. Прежде чем беспокоиться об атаках на уровне исходного кода, требующих локального или физического доступа, мы рекомендуем отдавать приоритет действительно критическим исправлениям и ограничивать доступ к службам, обслуживающим бизнес-процессы, и информационной системе в целом», – заключил эксперт.