
CVE-2024-24576 Prova de Conceito
As APIs Command::arg e Command::args afirmam em sua documentação que os argumentos serão passados ao processo iniciado tal como estão, independentemente do conteúdo dos argumentos, e não serão avaliados por um shell. Isso significa que deveria ser seguro passar entrada não confiável 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 iniciado, e cabe ao processo iniciado dividi-los. A maioria dos programas usa o argv padrão do C run-time, o que na prática resulta em uma forma majoritariamente consistente de dividir os argumentos.
Uma exceção, porém, é o cmd.exe (usado, entre outras coisas, para executar arquivos em lote), que possui sua própria lógica de divisão de argumentos. Isso força a biblioteca padrão a implementar escaping personalizado para os argumentos passados aos arquivos em lote. Infelizmente, foi relatado que nossa lógica de escaping não era suficientemente rigorosa, e era possível passar argumentos maliciosos que resultariam em execução arbitrária de shell.

Referência: https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html