CVE-2024-24576
El std::process::Command de Rust no escapaba correctamente los argumentos de los archivos por lotes en Windows
- Publicado
- 9 abr 2024
- Actualizado
- 4 nov 2025
- Asignación de CNA
- GitHub_M
- Evidencia observada
- 8 ago 2026
CVSS primario
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 días
- Percentil
- 97,4 %
- Fecha del modelo
- 21 sept 2026
EPSS es una estimación estadística, no una certeza o una medida de impacto. Combínelo con CVSS, estado KEV, exposición y su entorno.
Resumen
Rust es un lenguaje de programación. Se notificó al Grupo de Trabajo de Respuesta de Seguridad de Rust que la librería estándar de Rust anterior a la versión 1.77.2 no escapaba correctamente a los argumentos al invocar archivos por lotes (con las extensiones `bat` y `cmd`) en Windows usando el `Comando`. Un atacante capaz de controlar los argumentos pasados al proceso generado podría ejecutar comandos de shell arbitrarios evitando el escape. La gravedad de esta vulnerabilidad es crítica para quienes invocan archivos por lotes en Windows con argumentos que no son de confianza. Ninguna otra plataforma o uso se ve afectado. Las API `Command::arg` y `Command::args` establecen en su documentación que los argumentos se pasarán al proceso generado 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 que no sean de confianza 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 del proceso generado, y depende del proceso generado dividirlos. La mayoría de los programas utilizan el argv estándar en tiempo de ejecución de C, que en la práctica da como resultado una forma mayoritariamente 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 librería 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 darían como resultado una ejecución arbitraria del shell. Debido a la complejidad de `cmd.exe`, no identificamos una solución que escapara correctamente de los argumentos en todos los casos. Para mantener nuestras garantías de API, mejoramos la solidez del código de escape y cambiamos la API `Command` para que devuelva un error [`InvalidInput`][4] cuando no puede escapar de forma segura de un argumento. Este error se emitirá al generar el proceso. La solución está incluida en Rust 1.77.2. Tenga en cuenta que la nueva lógica de escape para archivos por lotes es conservadora y podría rechazar argumentos válidos. Aquellos que implementan el escape ellos mismos o solo manejan entradas confiables en Windows también pueden usar el método `CommandExt::raw_arg` para evitar la lógica de escape de la librería estándar.
Uso responsable
Utilice información sobre vulnerabilidades solo en sistemas de su propiedad o que esté autorizado a probar. Kitploit enlaza con metadatos de investigación pública y no almacena código de explotación ni cargas útiles maliciosas.