Befehlsschmuggel: Kritische LĂĽcke in Programmiersprachen unter Windows
BatBadBut heiĂźt eine kritische Befehlsschmuggel-LĂĽcke, die mehrere Programmiersprachen unter Windows betrifft. Abhilfe ist schwer.
Die Rust-Maintainer haben Version 1.77.2 der Programmiersprache und zugehöriger Tools veröffentlicht. Sie schließt eine Sicherheitslücke in der Rust-Standardbibliothek unter Windows. Das Problem reicht aber weiter, die zugrundeliegende Schwachstelle hat den Namen BatBadBut von ihrem Entdecker erhalten.
In der AnkĂĽndigung von Rust 1.77.2 schreiben die Entwickler, dass die Version eine SicherheitslĂĽcke schlieĂźt, CVE-2024-24576, mit einem CVSS-Wert 10.0 von 10, Risiko "kritisch". Die Standard-Bibliothek von Rust filtert Argumente nicht ausreichend, wenn Batch-Dateien mit den Dateiendungen .bat
und .cmd
aufgerufen werden. In der detaillierteren Schwachstellenbeschreibung des Rust-Sicherheitsteams erläutert es, dass Angreifer, die an aufgerufene Prozesse übergebene Argumente kontrollieren können, können dadurch beliebige Shell-Befehle ausführen, indem sie die Filterung umgehen.
BatBadBut: Windows-Befehle nicht sicher aufrufbar
Wer Rust unter Windows einsetzt, könne durch den Aufruf von rustup update stable
die installierte Rust-Version auf Stand 1.77.2 oder neuer bringen. Der Fehler betrifft ausschließlich Windows. Der IT-Forscher RyotaK von Flatt Security hat die zugrundeliegende Schwachstelle entdeckt. In einer Analyse erläutert er Details.
Schon die Ăśberschrift deutet das Problem an: Du kannst unter Windows Befehle nicht sicher ausfĂĽhren ("You can't securely execute commands on Windows"), schreibt er dort. Windows-Anwendungen, die indirekt auf die Funktion CreateProcess()
setzen, können unter bestimmten Umständen die Schwachstelle auslösen. Die Funktion ruft ihrerseits cmd.exe
auf, wenn sie Batch-Dateien wie .bat
, .cmd
und Ă„hnliche ausfĂĽhren soll.
cmd.exe
hat komplizierte Verarbeitungsregeln für die Argumente eines Befehls. Programmiersprachen ihrerseits filtern Argumente nicht ordentlich. Dadurch können Angreifer Befehle einschleusen, sofern sie Teile der Befehlsargumente einer Batch-Datei kontrollieren. Das passiere ausschließlich bei Batch-Dateien, bei .exe
-Dateien etwa jedoch nicht.
Lesen Sie auch
Endlich frei und sicher: Windows-Treiber in Rust
Der CVSS-Wert fĂĽr die Schwachstelleneinstufung sei daher nicht direkt auf einzelne Apps anzuwenden und es seien mehrere Bedingungen zur Ausnutzung zu erfĂĽllen. Die App muss einen Befehl in Windows ausfĂĽhren, dabei dĂĽrfe sie entweder keine Dateierweiterung oder .bat
respektive .cmd
angeben. Der auszufĂĽhrende Befehl muss Nutzer-kontrollierte Eingaben als Teil der Aufruf-Argumente enthalten und schlieĂźlich muss die Programmiersprache noch daran scheitern, die Argumente korrekt zu filtern. In der Analyse geht RyotaK noch weiter in die Details.
Neben Rust sind weitere Programmiersprachen betroffen. RyotaK nennt folgende Sprachen und den Status der Fehlerkorrekturen:
- Erlang: Dokumentationsupdate
- Go: Dokumentationsupdate
- Haskell: Patch verfĂĽgbar
- Java: Keine Fehlerkorrektur geplant
- Node.js: Patch in der Entwicklung
- PHP: Patch in der Entwicklung
- Python: Dokumentationsupdate
- Ruby: Dokumentationsupdate
- Rust: Patch verfĂĽgbar
Entwickler sollten ihre Umgebungen aktualisieren. Sofern sie Laufzeitumgebungen oder etwa eine Standard-Bibliothek wie Rust ausliefern, die verwundbar ist, sollten sie die Installationspakete ebenfalls aktualisieren und ihre Nutzer und Nutzerinnen über die Updates informieren. Die Namensgebung erläutert der Entdecker folgendermaßen: "It’s about batch files and bad, but not the worst." – "Es geht um Batch-Dateien und ist schlimm, aber nicht am schlimmsten".
(dmk)