In der Standardbibliothek der Sprache Rust wurde eine SicherheitsanfÀlligkeit (CVE-2022-21658) festgestellt, die mit einem Zeitrace-Zustand in der Funktion std::fs::remove_dir_all() zusammenhÀngt. Wenn diese Funktion zum Entfernen temporÀrer Dateien in einer privilegierten Anwendung verwendet wird, kann ein Angreifer erreichen, dass beliebige Systemdateien und -verzeichnisse gelöscht werden, auf die der Angreifer unter normalen Bedingungen keinen Zugriff hat.
Die SicherheitsanfĂ€lligkeit wird durch eine fehlerhafte Implementierung der ĂberprĂŒfung von symbolischen Links vor dem rekursiven Löschen von Verzeichnissen verursacht. Anstatt das Folgen von symbolischen Links zu verbieten, ĂŒberprĂŒft die Funktion remove_dir_all() zunĂ€chst, ob die Datei ein symbolischer Link ist. Wenn ein Link festgestellt wird, wird er als Datei gelöscht, und wenn es sich um ein Verzeichnis handelt, wird die Operation zum rekursiven Löschen des Inhalts aufgerufen. Das Problem besteht darin, dass zwischen der ĂberprĂŒfung und dem Beginn der Löschoperation eine kurze Verzögerung besteht.
In dem Moment, in dem die ĂberprĂŒfung bereits durchgefĂŒhrt wurde, die Operation zum Durchlaufen von Verzeichnissen zum Löschen jedoch noch nicht begonnen hat, kann der Angreifer das Verzeichnis mit temporĂ€ren Dateien durch einen symbolischen Link ersetzen. Wenn dies zur rechten Zeit geschieht, behandelt die Funktion remove_dir_all() den symbolischen Link als Verzeichnis und beginnt mit dem Löschen des Inhalts, auf den dieser Link verweist. Obwohl der Erfolg des Angriffs von der Genauigkeit des gewĂ€hlten Zeitpunkts fĂŒr den Austausch des Verzeichnisses abhĂ€ngt und es unwahrscheinlich ist, beim ersten Mal den richtigen Zeitpunkt zu treffen, gelang es den Forschern in Experimenten, nach der AusfĂŒhrung des Exploits innerhalb weniger Sekunden wiederholt erfolgreich zu attackieren.
Alle Versionen von Rust, von 1.0.0 bis 1.58.0 einschlieĂlich, sind anfĂ€llig fĂŒr SicherheitsanfĂ€lligkeiten. Das Problem wurde vorĂŒbergehend durch einen Patch behoben (die Korrektur wird in Version 1.58.1 enthalten sein, die in den nĂ€chsten Stunden erwartet wird). Die Beseitigung der SicherheitsanfĂ€lligkeiten in den Distributionen kann auf den folgenden Seiten verfolgt werden: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Allen Nutzern von Programmen in Rust, die mit erhöhten Rechten ausgefĂŒhrt werden und die Funktion remove_dir_all verwenden, wird dringend empfohlen, Rust auf Version 1.58.1 zu aktualisieren. Interessanterweise behebt der veröffentlichte Patch das Problem nicht auf allen Systemen, beispielsweise wird in REDOX und in macOS-Versionen vor 10.10 (Yosemite) die SicherheitsanfĂ€lligkeit aufgrund des Fehlens des Flags O_NOFOLLOW, das das Folgen von symbolischen Links deaktiviert, nicht blockiert.
Quelle: opennet.ru
