Компания Qualys выявила уязвимость (CVE-2025-6019) в библиотеке libblockdev, позволяющую через манипуляции с фоновым процессом udisks получить права root в системе. Работа прототипа эксплоита продемонстрирована в Ubuntu, Debian, Fedora и openSUSE Leap 15.
Процесс udisks применяется практически во всех дистрибутивах Linux и предоставляет интерфейс D-Bus для выполнения операций с накопителями, таких как монтирование и форматирование. Для совершения действий с накопителями udisks вызывает функции библиотеки libblockdev. Доступ к udisks по умолчанию открыт только для пользователей, работающих в контексте "allow_active", т.е. имеющих физический доступ к компьютеру и подключившихся через локальную консоль или запустивших графический сеанс. Пользователи, подключающиеся удалённо, например, по ssh, не попадают в этот контекст и напрямую не могут эксплуатировать уязвимость.
Для обхода данного ограничения можно использовать трюк, позволяющий поднять уровень аутентификации до "allow_active" через манипуляции с запуском утилитой systemctl пользовательского сервиса, который polkitd воспримет как признак локального сеанса. Суть метода в том, что polkitd определяет наличие физического доступа и присваивает уровень "allow_active" на основе косвенных признаков, на которые можно повлиять. Ограничения метода в том, что для обмана polkitd требуется, чтобы в системе уже был активен сеанс локального пользователя с физическим доступом.
Вторым методом получения прав "allow_active" является эксплуатация уязвимости (CVE-2025-6018) в PAM (Pluggable Authentication Modules), которую исследователи из Qualys выявили в ходе анализа уязвимости в libblockdev. Уязвимость позволяет любому пользователю, в том числе подключившемуся по SSH, выполнять операции в контексте "allow_active". Проблема специфична для настроек PAM в openSUSE Leap 15 и SUSE Linux Enterprise 15, и проявляется только в этих дистрибутивах.
В модуле pam_env в openSUSE и SUSE по умолчанию включено чтение файла ~/.pam_environment. Через данный файл пользователь может выставить переменные окружения XDG_SEAT=seat0 и XDG_VTNR=1, которые при дальнейшей обработке будут восприняты как признак физического присутствия пользователя, даже если фактически вход осуществлён по SSH. Модуль pam_env также вызывается при подключении по ssh в Debian 12 и Ubuntu 24.04 (в Debian 13 и Ubuntu 24.10+ он отключён), но выставление переменных окружения в данных дистрибутивах не может применяться для повышения уровня доступа до "allow_active", так как pam_env вызывается на финальном этапе после загрузки модуля pam_systemd и выставленные переменные окружения не могут повлиять на параметры сеанса.
Что касается уязвимости в libblockdev, то атакующий может примонтировать образ произвольной файловой системы в loop-режиме, разместив в этом образе исполняемый файл с флагом SUID root или специальное устройство (/dev/mem) для низкоуровневого доступа к дискам или памяти. Для блокирования подобных атак образы ФС монтируются системой с флагами nosuid и nodev, но уязвимость в libblockdev даёт возможность примонтировать образ без флагов nosuid и nodev. Суть уязвимости в том, что udisks позволяет пользователю с уровнем доступа "allow_active" менять размер своих файловых систем и libblockdev в процессе выполнения данной операции временно монтирует ФС без выставления флагов nosuid и nodev.
Таким образом атака сводится к созданию loop-устройства на базе образа ФС XFS, в котором размещён suid root файл, инициирования операции изменения размера loop-устройства и отслеживанию момента его монтирования в каталог /tmp/blockdev*:
victim> killall -KILL gvfs-udisks2-volume-monitor
victim> udisksctl loop-setup --file ./xfs.image --no-user-interaction
Mapped file ./xfs.image as /dev/loop0.
victim> while true; do /tmp/blockdev*/bash -c 'sleep 10; ls -l /tmp/blockdev*/bash' && break; done 2>/dev/null &
victim> gdbus call --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/block_devices/loop0 --method org.freedesktop.UDisks2.Filesystem.Resize 0 '{}'
Error: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Error resizing filesystem on /dev/loop0: Failed to unmount '/dev/loop0' after resizing it: target is busy
-r-sr-xr-x. 1 root root 1406608 Jun 18 09:42 /tmp/blockdev.RSM429/bash
victim> /tmp/blockdev*/bash -p
victim# id
uid=65534(nobody) gid=65534(nobody) euid=0(root) groups=65534(nobody)
Уязвимость в libblockdev пока устранена только в виде патчей. Проверить состояние новой версии пакета или подготовки исправления в дистрибутивах можно на следующих страницах (если страница недоступна, значит разработчики дистрибутива ещё не приступили к рассмотрению проблемы): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo и Arch (1, 2). В качестве обходных путей для блокирования уязвимости можно изменить правило доступа к операции "org.freedesktop.udisks2.modify-device" в polkit, изменив в файле /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy значение параметра "allow_active" с "yes" на "auth_admin".
Дополнительно можно отметить раскрытую несколько часов назад уязвимость (CVE-2025-6020) в пакете linux-pam, позволяющую локальному пользователю получить права root. Модуль pam_namespace должным образом не проверял файловые пути, подконтрольные пользователю, что позволяло через манипуляции с символическими ссылками и достижением состояния гонки добиться перезаписи привилегированных файлов в системе. Уязвимость устранена в выпуске linux-pam 1.7.1. Проверить состояние новой версии пакета или подготовки исправления в дистрибутивах можно на следующих страницах: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo и Arch (1, 2).
Источник: https://www.opennet.ru/opennews/art.shtml?num=63424