CVE-2024-24576
O std::process::Command do Rust não escapava adequadamente os argumentos de arquivos batch no Windows
- Publicado
- 9 de abr. de 2024
- Atualizado
- 4 de nov. de 2025
- Atribuindo CNA
- GitHub_M
- Evidência observada
- 8 de ago. de 2026
CVSS primário
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HModerado · próximos 30 dias
- Percentil
- 97,4%
- Data do modelo
- 21 de set. de 2026
EPSS é uma estimativa estatística, não uma certeza ou uma medida de impacto. Combine-o com CVSS, status KEV, exposição e seu ambiente.
Resumo
Rust é uma linguagem de programação. O Rust Security Response WG foi notificado de que a biblioteca padrão do Rust anterior à versão 1.77.2 não escapava corretamente os argumentos ao invocar arquivos batch (com as extensões `bat` e `cmd`) no Windows usando o `Command`. Um atacante capaz de controlar os argumentos passados ao processo gerado poderia executar comandos arbitrários de shell ao contornar o escape. A gravidade desta vulnerabilidade é crítica para aqueles que invocam arquivos batch no Windows com argumentos não confiáveis. Nenhuma outra plataforma ou uso é afetado. As APIs `Command::arg` e `Command::args` declaram em sua documentação que os argumentos serão passados ao processo gerado tal como estão, independentemente do conteúdo dos argumentos, e não serão avaliados por um shell. Isso significa que deve ser seguro passar entradas não confiáveis como argumento. No Windows, a implementação disso é mais complexa do que em outras plataformas, porque a API do Windows fornece apenas uma única string contendo todos os argumentos para o processo gerado, e cabe ao processo gerado dividi-los. A maioria dos programas usa o argv da runtime C padrão, o que na prática resulta em uma forma majoritariamente consistente de os argumentos serem divididos. Uma exceção, no entanto, é o `cmd.exe` (usado, entre outras coisas, para executar arquivos batch), que possui sua própria lógica de divisão de argumentos. Isso força a biblioteca padrão a implementar escape personalizado para argumentos passados a arquivos batch. Infelizmente, foi reportado que nossa lógica de escape não era suficientemente completa, e era possível passar argumentos maliciosos que resultariam em execução arbitrária de shell. Devido à complexidade do `cmd.exe`, não identificamos uma solução que escapasse corretamente os argumentos em todos os casos. Para manter nossas garantias de API, melhoramos a robustez do código de escape e alteramos a API `Command` para retornar um erro `InvalidInput` quando não for possível escapar com segurança um argumento. Esse erro será emitido ao gerar o processo. A correção está incluída no Rust 1.77.2. Observe que a nova lógica de escape para arquivos batch peca pelo lado conservador e pode rejeitar argumentos válidos. Aqueles que implementam o escape por conta própria ou lidam apenas com entradas confiáveis no Windows também podem usar o método `CommandExt::raw_arg` para contornar a lógica de escape da biblioteca padrão.
Fontes
7Uso responsável
Use informações de vulnerabilidade apenas em sistemas que você possui ou está autorizado a testar. O Kitploit vincula-se a metadados de pesquisa pública e não armazena código de exploração ou cargas maliciosas.