Уязвимости в snapd и Rust Сoreutils, позволяющие получить root-привилегии в Ubuntu

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 1171
Зарегистрирован: 20.08.2022

#

Уязвимости в snapd и Rust Сoreutils, позволяющие получить root-привилегии в Ubuntu
Дата публикации:Wed, 18 Mar 2026 15:21:13 +0300

Компания Qualys выявила уязвимость (CVE-2026-3888) в организации работы связки snap-confine и systemd-tmpfiles в Ubuntu, позволяющую непривилегированному пользователю получить root-доступ к системе. Проблема проявляется в Ubuntu в конфигурации по умолчанию начиная с выпуска 24.04. В Ubuntu 16.04-22.04 уязвимость может быть эксплуатирована в нестандартных конфигурациях, имитирующих поведение более новых версий дистрибутива. В Ubuntu исправление доступно во вчерашнем обновлении пакета snapd. В snapd проблема устранена в обновлении 2.75.
Уязвимость возникает из-за некорректного взаимодействия утилит snap-confine и systemd-tmpfiles, выполняемых с повышенными привилегиями. Утилита snap-confine формирует sandbox-окружение для выполнения snap-приложения, а systemd-tmpfiles осуществляет автоматическую очистку временных файлов и каталогов. По умолчанию утилита systemd-tmpfiles настроена на удаление всех старых файлов и каталогов в /tmp, что может использоваться атакующим для подмены каталога /tmp/.snap в момент после его удаления утилитой systemd-tmpfiles, но до пересоздания командой snap-confine.
Атака сводится к ожиданию запуска процесса очистки временных файлов, подмены каталога /tmp/.snap после его удаления и размещения модифицированной копии библиотек /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange. Атакующему может потребоваться несколько дней ожидания запуска systemd-tmpfiles, так как в Ubuntu 24.04 процесс очистки запускается раз в 10 дней, а в более новых выпусках - раз в 30 дней. После подмены каталога атакующий добивается инициализации нового sandbox-окружения при помощи snap-confine.
Во время формирования начинки sandbox-окружения во временном каталоге /tmp/.snap атакующий дожидается нужного момента и переименовывает /tmp/.snap/usr/lib/x86_64-linux-gnu.exchange в /tmp/.snap/usr/lib/x86_64-linux-gnu, подменяя таким образом библиотеки и обеспечивая их bind-монтирование с правами root. Таким образом атакующий получает контроль над разделяемыми библиотеками и загрузчиком ld.so, запускаемыми в sandbox-окружении snap, и может добиться выполнения произвольного кода с правами root через запуск любой suid-программы, в которой применяется динамическое связывание.
Имея root-доступ в sandbox-окружении, изолированном через AppArmor и фильтр системных вызовов на базе seccomp, атакующий может скопировать /bin/bash в каталог /var/snap/$SNAP/common/ и выставить ему права "04755" (suid root). Несмотря на то, что права изменены внутри sandbox-окружения, файл с изменёнными правами доступен и в основной системе, поэтому для получения полного root доступа достаточно запустить /var/snap/<имя_snap_пакета>/common/bash обычным непривилегированным пользователем из штатного системного окружения.
Попутно была выявлена уязвимость в инструментарии uutils coreutils (Rust Coreutils), аналоге пакета GNU Coreutils, написанном на языке Rust. Уязвимость позволяет непривилегированному пользователю получить права root в системе. Проблема выявлена в процессе рецензирования изменений в Ubuntu 25.10 и устранена обходным путём до релиза Ubuntu 25.10 через поставку /usr/bin/gnurm вместо uutils rm. В пакете uutils проблема была устранена в выпуске uutils coreutils 0.3.0, без отметки в списке изменений об устранении уязвимости (было указано, что в rm, du, chmod и chgrp реализован безопасный метод обхода путей).
Проблема вызвана состоянием гонки в утилите "rm", позволяющем локальному пользователю подменить содержимое каталога на символическую ссылку во время удаления подконтрольного пользователю файла процессом "rm" с правами root. Среди прочего уязвимость может быть эксплуатирована при ежедневном запуске из cron скрипта /etc/cron.daily/apport, который запускается с правами root и рекурсивно удаляет содержимое каталога /var/crash, доступного на запись всем пользователям в системе.
При рекурсивном удалении каталогов утилита rm вначале проверяет все каталоги, а затем последовательно удаляет их в обратном порядке, вызывая функцию rmdir(). Если добиться подмены родительского каталога на символическую ссылку сразу после проверки этого каталога, но до проверки вложенных в него дочерних каталогов, операция приведёт к удалению каталога, на который указывает символическая ссылка. Таким образом можно добиться не только удаления любого файла в системе, но и повышения привилегий через удаление каталога /tmp/snap-private-tmp/$SNAP/tmp/.snap для подмены содержимого sandbox-окружения snap-пакета (метод получения root аналогичен первой уязвимости).

Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=65014

Жизнь за Нер'зула!

Ответить