In der Paketbasis der Distribution Ubuntu 26.10, deren Veröffentlichung für den 15. Oktober geplant ist, wurde der vollständige Wechsel auf das in Rust geschriebene Toolkit uutils coreutils (Rust Coreutils) vollzogen. Die Werkzeuge aus Rust Coreutils haben sämtliche Komponenten des Pakets GNU Coreutils vollständig ersetzt, einschließlich der Dienstprogramme cp, mv und rm, die in Ubuntu 26.04 noch in der Variante aus GNU Coreutils ausgeliefert wurden.
Das Paket rust-coreutils wurde ursprünglich in Ubuntu 25.10 standardmäßig aktiviert, in der LTS-Reihe Ubuntu 26.04 kehrte man jedoch wieder zur Auslieferung der Dienstprogramme cp, mv und rm aus dem GNU-Coreutils-Paket zurück. Die Varianten von cp, mv und rm wurden wegen Sicherheitsproblemen zurückgenommen, die bei einer Prüfung der Codebasis von Rust Coreutils festgestellt wurden. Der Großteil der Schwachstellen in Rust Coreutils wird durch Race Conditions verursacht, die es ermöglichen, Daten nach der Prüfung ihrer Korrektheit, aber noch vor der Ausführung der Operation zu verändern (TOCTOU — Time-Of-Check-To-Time-Of-Use). Solche Schwachstellen ermöglichen es unter anderem, eine Datei im Zeitraum zwischen Abschluss der Prüfung und Beginn der Ausführung der Operation durch einen symbolischen Link zu ersetzen.
Im Kontext der Nutzung der Dienstprogramme cp, mv und rm in Systemskripten, die mit Root-Rechten ausgeführt werden, ermöglicht das Einschleusen eines symbolischen Links das Kopieren, Überschreiben oder Löschen beliebiger Dateien. Beispielsweise prüfte das Dienstprogramm rm beim rekursiven Löschen von Verzeichnissen zunächst alle Verzeichnisse und entfernte sie anschließend nacheinander in umgekehrter Reihenfolge, wobei die Funktion rmdir() aufgerufen wurde. Wenn das übergeordnete Verzeichnis direkt nach seiner Prüfung, aber noch vor der Prüfung der darin enthaltenen Unterverzeichnisse, durch einen symbolischen Link ersetzt wird, kann erreicht werden, dass beim täglichen Start des Cron-Skripts /etc/cron.daily/apport, das mit Root-Rechten den Inhalt des für alle Benutzer im System beschreibbaren Verzeichnisses /var/crash rekursiv löscht, jedes beliebige Verzeichnis im System entfernt wird.
Quelle: opennet.ru
