
CVE-2024-24576 Proof-of-Concept
Die APIs Command::arg und Command::args geben in ihrer Dokumentation an, dass die Argumente unabhängig vom Inhalt der Argumente unverändert an den erzeugten Prozess übergeben werden und nicht von einer Shell ausgewertet werden. Dies bedeutet, dass es sicher sein sollte, nicht vertrauenswürdige Eingaben als Argument zu übergeben.
Unter Windows ist die Implementierung komplizierter als auf anderen Plattformen, da die Windows-API nur einen einzigen String bereitstellt, der alle Argumente an den erzeugten Prozess enthält, und es dem erzeugten Prozess obliegt, diese aufzuteilen. Die meisten Programme verwenden die Standard-C-Laufzeit-argv, was in der Praxis zu einer weitgehend konsistenten Art der Argumentaufteilung führt.
Eine Ausnahme bildet jedoch cmd.exe (das unter anderem zum Ausführen von Batch-Dateien verwendet wird), das eine eigene Argumentaufteilungslogik besitzt. Dies zwingt die Standardbibliothek dazu, eine benutzerdefinierte Maskierung für Argumente zu implementieren, die an Batch-Dateien übergeben werden. Leider wurde gemeldet, dass unsere Maskierungslogik nicht gründlich genug war und es möglich war, bösartige Argumente zu übergeben, die zu einer beliebigen Shell-Ausführung führten.

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