CVE-2024-24576: Rust стал причиной удаленного захвата Windows

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

CVE-2024-24576(оценка CVSS: 10) связана с ошибкой механизма передачи команд и аргументов ОС, что позволяет аутентифицированному злоумышленнику удаленно выполнять вредоносный код без взаимодействия с пользователем. Атака обладает низкой сложностью исполнения.

Группа по реагированию на угрозы безопасности Rust была уведомлена о том, стандартная библиотека Rust не может должным образом экранировать аргументы при вызове пакетных файлов (с расширениями bat и cmd) в Windows с помощью Command API.

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

Проблема затрагивает все версии Rust до 1.77.2 на Windows, если код программы или одна из ее зависимостей вызывает и выполняет файлы пакетной обработки с ненадежными аргументами.

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

Инженер из Flatt Security, Рётак, который обнаружил уязвимость и назвал ее BatBadBut, отмечает, что она также затрагивает и другие языки программирования. Однако не для всех из них выпущены исправления.

  • Erlang (обновление документации);
  • Go (обновление документации);
  • Haskell (доступно исправление);
  • Java (не исправлено);
  • Node.js (исправление скоро будет доступно);
  • PHP (исправление скоро будет доступно);
  • Python (обновление документации);
  • Ruby (обновление документации).

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

Public Release.