В Rust Coreutils выявлено 113 уязвимостей. В Ubuntu 26.04 возвращены cp, mv и rm из GNU Coreutils

Компания Canonical опубликовала предварительные итоги внешнего аудита безопасности инструментария uutils coreutils (Rust Coreutils), написанного на языке Rust и частично применяемого в Ubuntu вместо пакета GNU Coreutils. Аудит был выполнен компанией Zellic, имеющей опыт анализа уязвимостей в проектах на языке Rust. В ходе проверки было выявлено 113 проблем с безопасностью.
В настоящее время уже доступен отчёт с результатами первого этапа аудита, охватывающего наиболее важные утилиты из набора uutils. На первом этапе, который был проведён с декабря 2025 по январь 2026 года, было выявлено 73 уязвимости, из которых 7 отмечены как критические, 11 — опасные, 29 — средней опасности и 26 — неопасные.
Информация о всех выявленных проблемах уже передана разработчикам uutils и большая часть уязвимостей была устранена в выпусках uutils 0.5–0.8 без лишней огласки.
Пакет rust-coreutils был включён по умолчанию в осеннем выпуске Ubuntu 25.10, но с учётом выявленных в ходе аудита проблем в LTS-ветке Ubuntu 26.04 возвращены утилиты cp, mv и rm из набора GNU Coreutils. Отмечается, что по состоянию на 22 апреля в данных утилитах остаётся не исправлено 8 известных состояний гонки. Остальные утилиты задействованы из выпуска rust-coreutils 0.8.0. В Ubuntu 26.10 разработчики намерены полностью перейти на rust-coreutils.
Уязвимости в системных утилитах опасны тем, что они используется в скриптах, запускаемых с правами root. Например, устранённая в выпуске uutils coreutils 0.3.0 уязвимость в утилите rm могла быть эксплуатирована при ежедневном запуске из cron скрипта /etc/cron.daily/apport, который выполняется с правами root и рекурсивно удаляет содержимое каталога /var/crash, доступного на запись всем пользователям в системе.
Среди уязвимостей, помеченных в первом отчёте критическими:
- Уязвимость в утилите chroot, вызванная обработкой опции
--userspecпосле вызоваchroot(), но до сброса привилегий. На системах с glibc резолвинг имён через функциюgetpwnam()приводит к чтению файла/etc/nsswitch.conf, применяемого в NSS (Name Service Switch), и динамической загрузке указанных в нём библиотек с модулями NSS (libnss_*.so.2). Так как до обработки NSS выполяется вызовchroot()файл/etc/nsswitch.confзагружается относительно нового корня, но NSS-библиотеки загружаются до сброса привилегий. Если пользователь имеет доступ на запись к новому корню, то он может подставить свои NSS-библиотеки и добиться выполнения кода с правами root. - Изменение прав доступа к файлу после сбоя создания именованного канала (FIFO) утилитой
mkfifo— если указать в качестве аргумента существующий файл, тоmkfifoвернёт ошибку, но при этом аварийно не завершит работу, а выполнит вызовset_permissions()и изменит права доступа к существующему файлу. С учётомumask 022уязвимость позволяет поменять права доступа к файлу на 644 (rw-r-r-) и получить доступ к файлам, для которых не было разрешено чтение. - Обход ограничений
--preserve-rootв утилите chmod, запрещающих выполнение рекурсивных операций относительно корня ФС. Уязвимость (CVE-2026–35338) вызвана тем, что в коде проверялось только точное совпадение пути с/и не выполнялась канонизация файлового пути. Для обхода проверки достаточно использовать путь вида/../или символическую ссылку на корень. Уязвимость опасна тем, что при возможности подставить свой путь в системный скрипт вызывающий командуchmod, можно добиться рекурсивного изменения прав доступа для всех файлов в ФС. - В утилите rm допускалась обработка любых сокращений опции
--no-preserve-root(--n,--no,--no-p,--no-presи т.п.) для отключения защиты от выполнение рекурсивной операции с корнем (например, можно указатьrm -rf --n /и удалить по ошибке все данные. В GNU Coreutils подобные сокращённые опции запрещены. - Обход ограничений
--preserve-rootв утилите rm, запрещающих выполнение рекурсивных операций относительно корня ФС, через подстановку символической ссылки на »/». - Отсутствие полноценной защиты от указания каталогов, начинающихся с точки. Например, при выполнении
rm -rf .утилита выведет ошибку, но при указанииrm -rf ./илиrm -rf .///молча удалит текущий каталог. - Ошибка в коде разбора аргументов утилиты
killпозволяет отправить сигнал всем процессам в системе при указании идентификатора процесса-1(kill -1).
>>> Источник
Linux.org.ru прочитано 5886 раз
