Новый класс уязвимостей может быть использован злоумышленниками для внедрения в приложение хорошо скрытого вредоносного функционала таким образом, что семантически они допустимы, но таким образом изменяют определенную исходным кодом приложения логику, что она открывает двери для серьезных кибер-рисков.
Эта техника, получившая название «Trojan Source», «использует тонкости стандартов кодирования текста, таких как Unicode, для создания исходного кода, в котором лексемы логически закодированы в порядке, отличном от того, в котором они отображаются, что приводит к уязвимостям, которые не могут быть восприняты человеком, проверяющим код» - заявили исследователи Кембриджского университета Николас Баучер и Росс Андерсон в недавно опубликованной работе.
Уязвимости - отслеживаемые как CVE-2021-42574 и CVE-2021-42694 - затрагивают компиляторы всех популярных языков программирования, таких как C, C++, C#, JavaScript, Java, Rust, Go и Python.
Компиляторы - это программы, которые переводят высокоуровневый читаемый чеоловеком исходный код в его низкоуровневые представления, такие как язык ассемблера, объектный код или машинный код, которые затем могут быть выполнены операционной системой.
По своей сути вопрос касается двунаправленного алгоритма Unicode (или Bidi), который обеспечивает поддержку как левосторонних (например, английского), так и правосторонних (например, арабского) языков, а также имеет так называемые двунаправленные переопределения, позволяющие писать левосторонние слова внутри правостороннего предложения или наоборот, тем самым заставляя левосторонний текст восприниматься как правосторонний.
Хотя ожидается, что результат работы компилятора будет правильно реализовывать предоставленный ему исходный код, расхождения, создаваемые вставкой символов переопределения Unicode Bidi в комментарии и строки, могут привести к сценарию, в результате которого синтаксически корректный исходный код, в котором порядок отображения символов представляет логику, расходящуюся с предполагаемой разработчиком.
Другими словами, атака работает путем кодирования файлов исходного кода для создания целевых уязвимостей, а не намеренного внедрения логических ошибок. Визуально изменяется порядок символов в исходном коде, который, хотя и отображается вполне приемлемым образом, обманывает компилятор, заставляя его обрабатывать код по-другому и радикально изменяя логику программы - например, заставляя комментарий выглядеть так, как будто это код.
«По сути, мы превращаем программу А в программу Б» - заявили исследователи. «Если изменение логики достаточно тонкое, чтобы остаться незамеченным при последующем тестировании, атакующий может незаметно внедрить целевые уязвимости».
Такие закладки могут оказать серьезное влияние на цепочку поставок, предупреждают исследователи, когда невидимые уязвимости, внедренные в программное обеспечение с открытым исходным кодом, прокладывают себе путь ко множеству систем, потенциально затрагивая всех пользователей этого программного обеспечения. Что еще хуже, атаки Trojan Source могут стать более разрушительными, если злоумышленник использует гомоглифы для переопределения ранее существовавших функций в пакете вышестоящего уровня и вызова их из программы-жертвы.
«Тот факт, что уязвимость Trojan Source затрагивает почти все компьютерные языки, делает ее редкой возможностью для общесистемного и экологически обоснованного межплатформенного и межвендорного применения контрмер» - отмечают исследователи. «Поскольку мощные атаки на цепочки поставок могут быть легко запущены с помощью этих методов, организациям, участвующим в цепочках поставок программного обеспечения, крайне важно внедрить средства защиты».
Источник: https://thehackernews.com