Sicherheitslücke in der Rust-Standardbibliothek

In der Rust-Standardbibliothek wurde eine Schwachstelle (CVE-2022-21658) aufgrund einer Racebedingung in der Funktion std::fs::remove_dir_all() identifiziert. Wenn diese Funktion zum Löschen temporärer Dateien in einer privilegierten Anwendung verwendet wird, kann ein Angreifer die Löschung beliebiger Systemdateien und Verzeichnisse erreichen, auf deren Löschung der Angreifer normalerweise keinen Zugriff hätte.

Die Sicherheitslücke wird durch eine fehlerhafte Implementierung der Überprüfung symbolischer Links vor dem rekursiven Löschen von Verzeichnissen verursacht. Anstatt zu verhindern, dass Symlinks verfolgt werden, prüft „remove_dir_all()“ zunächst, ob es sich bei der Datei um einen Symlink handelt. Wenn ein Link definiert ist, wird er als Datei gelöscht, und wenn es sich um ein Verzeichnis handelt, wird ein rekursiver Vorgang zum Entfernen von Inhalten aufgerufen. Das Problem besteht darin, dass zwischen der Prüfung und dem Start des Löschvorgangs eine leichte Verzögerung auftritt.

Zu einem Zeitpunkt, an dem die Prüfung bereits durchgeführt wurde, der Vorgang zum Aufzählen von Verzeichnissen zum Löschen jedoch noch nicht begonnen hat, kann der Angreifer das Verzeichnis durch temporäre Dateien mit einem symbolischen Link ersetzen. Wenn es zum richtigen Zeitpunkt trifft, behandelt die Funktion „remove_dir_all()“ den symbolischen Link als Verzeichnis und beginnt mit dem Entfernen des Inhalts, auf den der Link verweist. Obwohl der Erfolg des Angriffs von der Genauigkeit des gewählten Zeitpunkts des Verzeichnisaustauschs abhängt und es unwahrscheinlich ist, dass beim ersten Mal der richtige Zeitpunkt erreicht wird, konnten die Forscher während der Experimente einen wiederholbaren erfolgreichen Angriff erzielen, nachdem sie den Exploit darin ausgeführt hatten ein paar Sekunden.

Betroffen sind alle Rust-Versionen von 1.0.0 bis einschließlich 1.58.0. Das Problem wurde vorerst in Patchform behoben (der Fix wird in der Version 1.58.1 enthalten sein, die in wenigen Stunden erwartet wird). Die Behebung der Schwachstelle in den Distributionen können Sie auf diesen Seiten verfolgen: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Allen Benutzern von Rust-Programmen, die mit erhöhten Rechten laufen und die Funktion „remove_dir_all“ verwenden, wird empfohlen, Rust dringend auf Version 1.58.1 zu aktualisieren. Interessant ist, dass der veröffentlichte Patch das Problem nicht auf allen Systemen löst; beispielsweise wird die Schwachstelle in REDOX OS und Versionen von macOS vor 10.10 (Yosemite) nicht blockiert, da das O_NOFOLLOW-Flag fehlt, das die folgende Symbolik deaktiviert Links.

Source: opennet.ru

Kommentar hinzufügen