Eine Sicherheitslücke in der Standardbibliothek der Programmiersprache Rust ermöglicht es Angreifern, Windows-Systeme durch Command-Injection-Angriffe zu kompromittieren.

Die Schwachstelle, die als CVE-2024-24576 erfasst ist, entsteht durch Schwächen in der Injektion von Betriebssystembefehlen und -argumenten, die es Angreifern erlauben, unerwartete und potenziell schädliche Befehle auf dem Betriebssystem auszuführen.

GitHub hat diese Sicherheitslücke mit einer maximalen CVSS-Basisbewertung von 10/10 als kritisch eingestuft. Unauthentifizierte Angreifer können sie aus der Ferne, in Angriffen niedriger Komplexität und ohne Benutzerinteraktion ausnutzen.

Die Rust Security Response Working Group erklärte: „Es wurde festgestellt, dass die Rust-Standardbibliothek Argumente beim Aufrufen von Batch-Dateien (mit den Erweiterungen .bat und .cmd) unter Windows mittels der Command-API nicht korrekt maskiert. Ein Angreifer, der die Kontrolle über die an den Prozess übergebenen Argumente hat, könnte willkürliche Shell-Befehle ausführen, indem er die Maskierung umgeht. Die Schwere dieser Sicherheitslücke ist kritisch, wenn Sie unter Windows Batch-Dateien mit nicht vertrauenswürdigen Argumenten aufrufen. Keine andere Plattform oder Nutzung ist betroffen.“

Alle Rust-Versionen vor 1.77.2 unter Windows sind betroffen, wenn der Code eines Programms oder einer seiner Abhängigkeiten Batch-Dateien mit nicht vertrauenswürdigen Argumenten aufruft und ausführt.

Das Rust-Sicherheitsteam stand vor einer erheblichen Herausforderung, da es keine Lösung finden konnte, die Argumente unter allen Umständen korrekt maskiert. Infolgedessen mussten sie die Robustheit des Maskierungscodes verbessern und die Command-API modifizieren. Kann die Command-API ein Argument beim Starten des Prozesses nicht sicher maskieren, gibt sie einen Fehler vom Typ InvalidInput zurück.

Zusätzliche Hinweise der Rust Security Response WG:

„Wenn Sie die Maskierung selbst implementieren oder nur vertrauenswürdige Eingaben verarbeiten, können Sie unter Windows auch die Methode CommandExt::raw_arg verwenden, um die Maskierungslogik der Standardbibliothek zu umgehen.“

Der Sicherheitsingenieur Ryotak von Flatt Security, der die Schwachstelle entdeckte und sie „BatBadBut“ nannte, sagt, dass der Fehler auch die folgenden Programmiersprachen betrifft—jedoch haben nicht alle von ihnen Patches veröffentlicht:

  • Erlang (Dokumentationsaktualisierung)
  • Go (Dokumentationsaktualisierung)
  • Haskell (Patch verfügbar)
  • Java (wird nicht behoben)
  • Node.js (Patch wird verfügbar sein)
  • PHP (Patch wird verfügbar sein)
  • Python (Dokumentationsaktualisierung)
  • Ruby (Dokumentationsaktualisierung)

Ryotaks Rat zur Vermeidung unerwarteter Ausführungen von Batch-Dateien:

„Um die unerwartete Ausführung von Batch-Dateien zu verhindern, sollten Sie erwägen, die Batch-Dateien in ein Verzeichnis zu verschieben, das nicht in der PATH-Umgebungsvariable enthalten ist. In diesem Fall werden die Batch-Dateien nicht ausgeführt, es sei denn, der vollständige Pfad ist angegeben, so dass die unerwartete Ausführung von Batch-Dateien verhindert werden kann.“

Im Februar forderte das Büro des Nationalen Cyber-Direktors des Weißen Hauses (ONCD) Technologieunternehmen auf, speichersichere Programmiersprachen wie Rust zu adoptieren, um die Software-Sicherheit durch Minimierung der Anzahl von Speichersicherheitslücken zu verbessern.