CVE-2024-24576
std::process::Command в Rust некорректно экранировал аргументы batch-файлов в Windows.
- Опубликовано
- 9 апр. 2024 г.
- Обновлено
- 4 нояб. 2025 г.
- Назначение CNA
- GitHub_M
- Наблюдены доказательства
- 8 авг. 2026 г.
Первичный CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HСредний · следующие 30 дней
- Процентиль
- 97,4 %
- Дата модели
- 21 сент. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
Резюме
Rust — это язык программирования. Группа реагирования на угрозы безопасности Rust Security Response WG была уведомлена о том, что стандартная библиотека Rust до версии 1.77.2 не выполняла должное экранирование аргументов при вызове пакетных файлов (с расширениями `bat` и `cmd`) в Windows с помощью `Command`. Злоумышленник, способный контролировать аргументы, передаваемые запускаемому процессу, мог выполнить произвольные команды оболочки, обойдя экранирование. Для тех, кто вызывает пакетные файлы в Windows с недоверенными аргументами, серьёзность этой уязвимости критична. Никакие другие платформы или сценарии использования не затронуты. API `Command::arg` и `Command::args` в своей документации утверждают, что аргументы будут переданы запускаемому процессу как есть, независимо от их содержимого, и не будут интерпретироваться оболочкой. Это означает, что передавать недоверенные входные данные в качестве аргумента должно быть безопасно. В Windows реализация этого сложнее, чем на других платформах, поскольку Windows API предоставляет лишь одну строку, содержащую все аргументы запускаемого процесса, и разделять их должен сам запускаемый процесс. Большинство программ используют стандартный argv среды выполнения языка C, что на практике приводит к в целом единообразному способу разделения аргументов. Однако исключением является `cmd.exe` (используемый, среди прочего, для выполнения пакетных файлов), у которого собственная логика разделения аргументов. Это вынуждает стандартную библиотеку реализовывать собственное экранирование для аргументов, передаваемых пакетным файлам. К сожалению, поступило сообщение о том, что наша логика экранирования была недостаточно тщательной, и существовала возможность передать вредоносные аргументы, которые приводили к произвольному выполнению команд оболочки. Из-за сложности `cmd.exe` мы не нашли решения, которое корректно экранировало бы аргументы во всех случаях. Чтобы сохранить гарантии нашего API, мы повысили надёжность кода экранирования и изменили API `Command`, чтобы он возвращал ошибку `InvalidInput`, когда не может безопасно экранировать аргумент. Эта ошибка будет возникать при запуске процесса. Исправление включено в Rust 1.77.2. Обратите внимание, что новая логика экранирования для пакетных файлов намеренно консервативна и может отклонять допустимые аргументы. Тем, кто реализует экранирование самостоятельно или обрабатывает только доверенные входные данные в Windows, также можно использовать метод `CommandExt::raw_arg`, чтобы обойти логику экранирования стандартной библиотеки.
Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.