
CVE-2024-24576 Preuve de concept
Les API Command::arg et Command::args indiquent dans leur documentation que les arguments seront transmis au processus lancé tels quels, indépendamment du contenu des arguments, et ne seront pas évalués par un shell. Cela signifie qu'il devrait être sûr de passer une entrée non fiable comme argument.
Sur Windows, l'implémentation est plus complexe que sur les 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 découper. La plupart des programmes utilisent l'argv standard du runtime C, ce qui en pratique donne une manière globalement cohérente de découper les arguments.
Une exception toutefois : cmd.exe (utilisé, entre autres, pour exécuter les fichiers batch), qui possède sa propre logique de découpage 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é rapporté que notre logique d'échappement n'était pas assez approfondie, et qu'il était possible de passer des arguments malveillants aboutissant à une exécution arbitraire de commandes shell.

Référence : https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html