CVE-2024-24576
Rusts std::process::Command hat Argumente von Batch-Dateien unter Windows nicht ordnungsgemäß maskiert
- Veröffentlicht
- 09.04.2024
- Aktualisiert
- 04.11.2025
- CNA zuweisen
- GitHub_M
- Beweise beobachtet
- 08.08.2026
Primäres CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HMittel · nächste 30 Tage
- Perzentil
- 97,4 %
- Modelldatum
- 21.09.2026
EPSS ist eine statistische Schätzung, keine Gewissheit oder ein Maß für die Auswirkung. Kombinieren Sie es mit CVSS, KEV-Status, Belichtung und Ihrer Umgebung.
Zusammenfassung
Rust ist eine Programmiersprache. Die Rust Security Response WG wurde benachrichtigt, dass die Rust-Standardbibliothek vor Version 1.77.2 Argumente nicht ordnungsgemäß escaped hat, wenn Batch-Dateien (mit den Erweiterungen `bat` und `cmd`) unter Windows mit `Command` aufgerufen werden. Ein Angreifer, der die an den erzeugten Prozess übergebenen Argumente kontrollieren kann, könnte durch Umgehung des Escapings beliebige Shell-Befehle ausführen. Der Schweregrad dieser Schwachstelle ist kritisch für diejenigen, die Batch-Dateien unter Windows mit nicht vertrauenswürdigen Argumenten aufrufen. Keine andere Plattform oder Verwendung ist betroffen. Die APIs `Command::arg` und `Command::args` geben in ihrer Dokumentation an, dass die Argumente unverändert an den erzeugten 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 Argument zu übergeben. Unter Windows ist die Implementierung komplexer als auf anderen Plattformen, da die Windows-API nur einen einzelnen String bereitstellt, der alle Argumente für den erzeugten Prozess enthält, und es dem erzeugten Prozess überlassen bleibt, sie 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 ist jedoch `cmd.exe` (das unter anderem zur Ausführung von Batch-Dateien verwendet wird), das eine eigene Argumentaufteilungslogik besitzt. Das zwingt die Standardbibliothek dazu, ein benutzerdefiniertes Escaping für Argumente zu implementieren, die an Batch-Dateien übergeben werden. Leider wurde berichtet, dass unsere Escaping-Logik nicht gründlich genug war und es möglich war, bösartige Argumente zu übergeben, die zu beliebiger Shell-Ausführung führen könnten. Aufgrund der Komplexität von `cmd.exe` haben wir keine Lösung identifiziert, die Argumente in allen Fällen korrekt escaped. Um unsere API-Garantien zu wahren, haben wir die Robustheit des Escaping-Codes verbessert und die `Command`-API so geändert, dass sie einen `InvalidInput`-Fehler zurückgibt, wenn sie ein Argument nicht sicher escapen kann. Dieser Fehler wird beim Erzeugen des Prozesses ausgegeben. Der Fix ist in Rust 1.77.2 enthalten. Beachten Sie, dass die neue Escaping-Logik für Batch-Dateien konservativ ist und gültige Argumente ablehnen kann. Diejenigen, die das Escaping selbst implementieren oder nur vertrauenswürdige Eingaben unter Windows verarbeiten, können auch die Methode `CommandExt::raw_arg` verwenden, um die Escaping-Logik der Standardbibliothek zu umgehen.
Verantwortungsvoller Umgang
Verwenden Sie Schwachstelleninformationen nur auf Systemen, die Sie besitzen oder zu deren Testen Sie berechtigt sind. Kitploit verlinkt auf öffentliche Forschungsmetadaten und speichert keinen Exploit-Code oder bösartige Payloads.