Alert!

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.

In Pocket speichern vorlesen Druckansicht 28 Kommentare lesen
Stilisiertes Bild: Laptop zeigt Eingabeaufforderung mit einer .bat-Datei

BatBadBut-Lücke in Programmiersprachen erlaubt Befehlsschmuggel.

(Bild: Bild erstellt mit KI in Bing Designer durch heise online / dmk)

Lesezeit: 3 Min.
Von

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.

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.

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)