В Rust Coreutils са открити 113 уязвимости. В Ubuntu 26.04 са върнати cp, mv и rm от GNU Coreutils

Компания Canonical публикува предварителни резултати от независимия одит на инструментариума uutils coreutils (Rust Coreutils), написан на езика Rust и частично прилаган в Ubuntu вместо пакета GNU Coreutils. Одитът е извършен от компания Zellic, която има опит в анализа на уязвимости в проекти на езика Rust. По време на проверката бяха открити 113 проблема със сигурността.

В момента вече е наличен отчет (PDF, 156 страници) с резултатите от първия етап на одита, обхващащ най-важните утилити от набора uutils. На първия етап, който беше проведен от декември 2025 до януари 2026 година, бяха открити 73 уязвимости, от които 7 са маркирани като критични, 11 — опасни, 29 — със средна опасност и 26 — неопасни.

Вторият етап на одита беше проведен от февруари до март и обхващаше второстепенни утилити, които не бяха проверени на първия етап. На втория етап бяха открити 40 уязвимости, опасността от които все още не се уточнява (отчетът ще бъде публикуван по-късно). Информацията за всички открити проблеми вече е предадена на разработчиците на 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() и променя правата за достъп до съществуващия файл. С оглед умаск 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).

В останалата част голямата част от уязвимостите се отнасят към класа TOCTOU (Time-Of-Check-To-Time-Of-Use), предполагащ наличие на състезание, позволяващо промяна на данни в момента след проверка на коректността на информацията, но преди извършване на операция с тях, например смяна на файл с символична връзка в момента между завършване на проверката и започване на изпълнението на операцията. В контекста на използването на утилитите cp и mv в системни скриптове, стартирани с права root, подобни уязвимости позволяват копиране или презаписване на произволни файлове.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster