
CVE-2024-24576 Prueba de Concepto
Las API Command::arg y Command::args indican en su documentación que los argumentos se pasarán al proceso hijo tal cual, independientemente del contenido de los argumentos, y que 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 única cadena que contiene todos los argumentos para el proceso hijo, y depende del proceso hijo dividirlos. La mayoría de los programas usan el argv estándar de C run-time, lo que en la práctica resulta en una forma mayormente consistente de dividir los argumentos.
Sin embargo, 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. Eso obliga a la biblioteca estándar a implementar un escape personalizado para los argumentos pasados a los archivos por lotes. Desafortunadamente, se informó que nuestra lógica de escape no era lo suficientemente exhaustiva, y era posible pasar argumentos maliciosos que resultaran en la ejecución arbitraria de shell.

Referencia: https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html