W repozytorium pakietów dystrybucji Ubuntu 26.10, której wydanie zaplanowano na 15 października, dokonano pełnego przejścia na zestaw narzędzi uutils coreutils (Rust Coreutils), napisany w języku Rust. Narzędzia z pakietu Rust Coreutils całkowicie zastąpiły wszystkie komponenty pakietu GNU Coreutils, w tym programy cp, mv i rm, które w Ubuntu 26.04 były dostarczane w wersji GNU Coreutils.
Pakiet rust-coreutils został początkowo domyślnie włączony w wydaniu Ubuntu 25.10, jednak w gałęzi LTS Ubuntu 26.04 cofnięto zmianę i przywrócono dostarczanie narzędzi cp, mv i rm z zestawu GNU Coreutils. Warianty cp, mv i rm przywrócono z powodu problemów bezpieczeństwa wykrytych podczas audytu bazy kodu Rust Coreutils. Większość luk w Rust Coreutils wynika z występowania warunków wyścigu, które pozwalają zmienić dane po sprawdzeniu poprawności informacji, ale przed wykonaniem operacji na nich (TOCTOU — Time-Of-Check-To-Time-Of-Use). Między innymi takie podatności umożliwiają podmianę pliku na dowiązanie symboliczne w czasie pomiędzy zakończeniem sprawdzania a rozpoczęciem wykonywania operacji.
W kontekście używania narzędzi cp, mv i rm w skryptach systemowych uruchamianych z uprawnieniami root podstawienie dowiązania symbolicznego umożliwia skopiowanie, nadpisanie lub usunięcie dowolnych plików. Na przykład przy rekursywnym usuwaniu katalogów narzędzie rm najpierw sprawdzało wszystkie katalogi, a następnie kolejno usuwało je w odwrotnej kolejności, wywołując funkcję rmdir(). Jeśli podmienić katalog nadrzędny na dowiązanie symboliczne zaraz po sprawdzeniu tego katalogu, ale przed sprawdzeniem zagnieżdżonych w nim katalogów podrzędnych, można doprowadzić do usunięcia dowolnego katalogu w systemie przy codziennym uruchamianiu z crona skryptu /etc/cron.daily/apport, który działając z uprawnieniami root rekursywnie usuwa zawartość katalogu /var/crash, dostępnego do zapisu dla wszystkich użytkowników systemu.
Źródło: opennet.ru
