Безопасность
Технический

Обнаружена критическая уязвимость BatBadBut, затрагивающая стандартные библиотеки различных языков программирования, включая популярный у хакеров Rust. Уязвимость позволяет злоумышленнику выполнить произвольный код, когда программа Rust выполняет сценарий Windows, если аргументы передаются без отдельного экранирования специальных символов.

Критическая уязвимость в Rust

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

В случае с Rust уязвимость под названием BatBadBut отслеживается под сервисным идентификатором CVE-2024-24576. GitHub присвоил ему критический уровень опасности (10 баллов из 10 по шкале CVSS). Исследователь безопасности под псевдонимом выявил проблему. РётаК С Японский Информационная безопасность компании Flatt Security.

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

код6.jpg

Новая уязвимость BatBadBut затрагивает стандартные библиотеки некоторых языков программирования

Как отмечает RyotaK, большинство существующих приложений не подвержены этой уязвимости, поскольку для ее использования требуется соблюдение определенного количества очень специфических условий. Злоумышленнику важно, чтобы код программы содержал вызов команды Операционная система с определяемыми пользователем аргументами — желательно сценарий Windows с расширением bat или cmd.

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

ЧИТАТЬ   Sting - Fields of Gold (обложка на русском языке)

Корни проблемы

Предпосылкой появления уязвимости является неочевидное поведение функции системы. окна называется CreateProcess и используется для создания нового процесса из программы, расположенной на диске. Эта функция использует командный интерпретатор Windows (cmd.exe) для запуска пакетных файлов (bat или cmd), в противном случае операционная система Корпорация Майкрософт не может запускать такие сценарии.

Само по себе такое поведение функции не является проблемой, но стандартные библиотеки многих языков программирования часто содержат функцию-обертку над CreateProcess со встроенным механизмом экранирования специальных символов, который применяется при каждом выполнении. .

Стандартная библиотека Rust представлена ​​функциями Command::arg и Command::args, которые, согласно документации, предназначены для передачи аргументов процессу без обработки оболочкой. Предполагается, что в этом случае безопасно проверять вводимые пользователем данные в качестве аргумента.

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

Большинство программ для этих целей используют подход, аналогичный прописанному в стандарте языка C — все аргументы при запуске приложения помещаются в массив argv, каждый элемент которого содержит один аргумент. командная строкаперешел в процесс Операционная система. В cmd.exe, необходимом для запуска пакетных файлов, используется специальная логика разделения строки аргументов, поэтому разработчики стандартных библиотек вынуждены реализовывать специальные escape-обработчики, передаваемые файлами bat и cmd, для защиты от подмены аргументов. . Оказалось, что эти алгоритмы в случае с Rust оказались несовершенными и до обновления 1.77.2 могли игнорировать некоторые специальные символы — при определённых манипуляциях с двойными кавычками — и таким образом разрешать выполнение произвольного кода. .

ЧИТАТЬ   Власти хотят перевести все телевидение и интернет на российские спутники связи

Например, если внутри программы появилось безобидное сообщение сценарий '/.test.bat', который принимает указанный пользователем аргумент, злоумышленник он может передать строку '»&calc.exe', поэтому полная команда после обработки функцией-оболочкой над CreateProcess будет выглядеть так: 'C:\Windows\System32\cmd.exe /c. test.bat «»&calc .exe»', и результатом его выполнения будет запуск калькулятор Окна.

Параметр «/c» указывает интерпретатору выполнить следующую команду и затем выйти. Символ амперсанда рассматривается как разделитель между двумя командами, выполняемыми последовательно.

Какие еще языки программирования находятся под угрозой?

Помимо Rust проблема наблюдается в стандартных языковых библиотеках ЭрлангДа ладно, Java, Python, РубинХаскелл, Node.js и PHP. Разработчики последних трёх подготовили исправлениякоторые улучшают механизм escape для защиты от подстановки аргументов.

Другие проекты, кроме Джава Мы добавили в документацию информацию о последствиях отсутствия экранирования специальных символов.

Разработчики Java устраняют уязвимость не рассматривайте возможность сделать это, поскольку они, вероятно, не берут на себя ответственность за защиту перед разработчиками.

Любимый язык хакеров

Об этом в феврале 2024 года CNews писал. Американские власти призвал разработчиков программного обеспечения как можно скорее прекратить использование опасных языков C и C++. В качестве альтернативы предлагается Питона также Rust, очень популярный среди хакеров.

Авторы часто выбирают Rust в качестве инструмента. вредоносное ПО, и в последнее время этот язык приобретает все больше поклонников среди законопослушных разработчиков программного обеспечения разной степени квалификации. Во всяком случае, это демонстрируют результаты опроса сообщества Rust Foundation.

В рейтинге популярности языков программирования ТИОБЕ по результатам Rust за январь 2024 г. взял 19 место, позади Python, C, C++, Java, C#, JavaScript, PHP и даже Фортран.

Дмитрий Степанов

Source

От admin