CVE-2024-24576
Le std::process::Command de Rust n'échappait pas correctement les arguments des fichiers batch sous Windows.
- Publié
- 9 avr. 2024
- Mise à jour
- 4 nov. 2025
- Attribution de CNA
- GitHub_M
- Preuve observée
- 8 août 2026
CVSS primaire
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HModéré · 30 prochains jours
- Percentile
- 97,4 %
- Date du modèle
- 21 sept. 2026
EPSS est une estimation statistique, et non une certitude ou une mesure d'impact. Combinez-le avec CVSS, le statut KEV, l'exposition et votre environnement.
Résumé
Rust est un langage de programmation. Le groupe de réponse aux incidents de sécurité de Rust (Rust Security Response WG) a été notifié que la bibliothèque standard de Rust, dans les versions antérieures à la version 1.77.2, n'échappait pas correctement les arguments lors de l'invocation de fichiers batch (avec les extensions `bat` et `cmd`) sur Windows à l'aide de `Command`. Un attaquant capable de contrôler les arguments passés au processus lancé pouvait exécuter des commandes shell arbitraires en contournant l'échappement. La gravité de cette vulnérabilité est critique pour ceux qui invoquent des fichiers batch sur Windows avec des arguments non fiables. Aucune autre plateforme ni aucun autre usage n'est affecté. Les API `Command::arg` et `Command::args` indiquent dans leur documentation que les arguments seront passés tels quels au processus lancé, quel que soit leur contenu, et qu'ils ne seront pas évalués par un shell. Cela signifie qu'il devrait être sûr de passer des entrées non fiables comme argument. Sous Windows, l'implémentation de cela est plus complexe que sur d'autres plateformes, car l'API Windows ne fournit qu'une seule chaîne contenant tous les arguments au processus lancé, et c'est au processus lancé de les séparer. La plupart des programmes utilisent le argv standard du runtime C, ce qui aboutit en pratique à une manière plutôt cohérente de séparer les arguments. Une exception toutefois est `cmd.exe` (utilisé entre autres pour exécuter des fichiers batch), qui possède sa propre logique de séparation des arguments. Cela oblige la bibliothèque standard à implémenter un échappement personnalisé pour les arguments passés aux fichiers batch. Malheureusement, il a été signalé que notre logique d'échappement n'était pas assez rigoureuse, et qu'il était possible de passer des arguments malveillants qui aboutiraient à une exécution shell arbitraire. En raison de la complexité de `cmd.exe`, nous n'avons pas identifié de solution qui échapperait correctement les arguments dans tous les cas. Pour maintenir nos garanties d'API, nous avons amélioré la robustesse du code d'échappement et modifié l'API `Command` pour qu'elle retourne une erreur `InvalidInput` lorsqu'elle ne peut pas échapper un argument en toute sécurité. Cette erreur sera émise lors du lancement du processus. Le correctif est inclus dans Rust 1.77.2. Notez que la nouvelle logique d'échappement pour les fichiers batch privilégie la prudence et pourrait rejeter des arguments valides. Ceux qui implémentent l'échappement eux-mêmes ou qui ne traitent que des entrées fiables sous Windows peuvent également utiliser la méthode `CommandExt::raw_arg` pour contourner la logique d'échappement de la bibliothèque standard.
Utilisation responsable
Utilisez les informations de vulnérabilité uniquement sur les systèmes que vous possédez ou que vous êtes autorisé à tester. Kitploit renvoie aux métadonnées de la recherche publique et ne stocke pas de code d'exploitation ni de charges utiles malveillantes.