В пакетной базе дистрибутива Ubuntu 26.10, релиз которого намечен на 15 октября, осуществлён полный переход на инструментарий uutils coreutils (Rust Coreutils), написанный на языке Rust. Утилиты из состава Rust Coreutils полностью заменили все компоненты пакета GNU Coreutils, включая утилиты cp, mv и rm, которые в Ubuntu 26.04 поставлялись в варианте из GNU Coreutils.
Пакет rust-coreutils изначально был включён по умолчанию в выпуске Ubuntu 25.10, но в LTS-ветке Ubuntu 26.04 был совершён откат на поставку утилит cp, mv и rm из набора GNU Coreutils. Варианты cp, mv и rm были возвращены из-за проблем с безопасностью, выявленных в ходе аудита кодовой базы Rust Coreutils. Большая часть уязвимостей в Rust Coreutils вызвано наличием состояния гонки, позволяющим изменить данные в момент после проверки корректности информации, но до выполнения операции с ними (TOCTOU — Time-Of-Check-To-Time-Of-Use). Среди прочего, подобные уязвимости позволяют подменить файл на символическую ссылку в момент между завершением проверки и началом выполнения операции.
В контексте использования утилит cp, mv и rm в системных скриптах, запускаемых с правами root, подстановка символической ссылки даёт возможность скопировать, перезаписать или удалить произвольные файлы. Например, при рекурсивном удалении каталогов утилита rm вначале проверяла все каталоги, а затем последовательно удаляла их в обратном порядке, вызывая функцию rmdir(). Если подменить родительский каталог на символическую ссылку сразу после проверки этого каталога, но до проверки вложенных в него дочерних каталогов, можно добиться удаления любого каталога в системе при ежедневном запуске из cron скрипта /etc/cron.daily/apport, который работая с правами root рекурсивно удаляет содержимое каталога /var/crash, доступного на запись всем пользователям в системе.
Burimi: opennet.ru
