
Prueba de concepto para CVE-2026-43494 (PinTheft): escalada de privilegios local (LPE) en Linux mediante el bug de refcount de RDS zerocopy + búferes fijos de io_uring → sobrescritura de page-cache SUID. Solo investigación autorizada.
Prueba de concepto — uid=1000(raken) → uid=0(root) después de ./sley en WSL2 (6.6.87.2-microsoft-standard-WSL2)
Prueba de concepto de un solo archivo para CVE-2026-43494 (PinTheft): una escalada local de privilegios en el kernel de Linux que encadena un bug de conteo de referencias en RDS zerocopy con búferes fijos de io_uring para sobrescribir la caché de páginas de un binario SUID de root.
Aviso legal: Este repositorio es solo para investigación de seguridad autorizada, educación y pruebas defensivas. Ejecutarlo contra sistemas que no posees o para los que no tienes permiso explícito de pruebas es ilegal y poco ético. Los autores no asumen ninguna responsabilidad por el mal uso.
La investigación pública original y el PoC fueron publicados por el equipo V12 Security (Aaron Esau). SLEY es una reimplementación independiente y compacta con una interfaz de terminal estilizada para uso en laboratorio y aprendizaje.
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]
su, mount, passwd, …).FOLL_PIN ≈ 1024).execve del binario SUID ejecuta el stub inyectado como root.CONFIG_RDS=y y CONFIG_RDS_TCP=yCONFIG_IO_URING=y y kernel.io_uring_disabled = 0rds / rds_tcp cargados (o autocargables por usuarios no privilegiados)IORING_REGISTER_CLONE_BUFFERS utilizada por la cadena públicasudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# or equivalent headers package on your distro
# Patched? (example — adjust for your distro)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS available?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring enabled?
cat /proc/sys/kernel/io_uring_disabled # expect 0
gcc -O2 -Wall -Wextra -o sley sley.c
Enlace estático (opcional, para imágenes de laboratorio mínimas):
gcc -O2 -static -o sley sley.c
./sley
Toda la salida de estado va a stderr (interfaz ANSI de 256 colores, barra de progreso, registro por fases). Asegúrate de que tu terminal soporta UTF-8 y truecolor/256 colores para la interfaz de recuadros.
Ejemplo de fases:
PHASE 1 │ Reconnaissance
PHASE 2 │ Memory & io_uring setup
PHASE 3 │ Pin reference theft (RDS zerocopy)
PHASE 4 │ Page cache overwrite & privesc
En una configuración explotada con éxito, la cadena se completa y entrega el control al binario SUID descubierto con la primera página sobrescrita, lo que produce una shell de root si la condición de carrera y el estado del kernel se alinean.
En kernels parcheados, hosts endurecidos o ausencia de RDS/io_uring, el PoC fallará temprano (sin objetivo SUID, errores de mmap/io_uring/socket, etc.).
Los avisos de seguridad específicos de cada distribución pueden incluir parches retroportados; sigue la cola de seguridad del kernel de tu proveedor.
.
├── README.md # This file
├── proof-of-concept.jpg # Screenshot: successful LPE (uid 1000 → root)
├── sley.c # Single-file PoC + terminal UI
└── .gitignore
Este software se proporciona tal cual para investigación y educación. Eres responsable de cumplir con las leyes aplicables y de obtener autorización por escrito antes de probar cualquier sistema que no poseas.
MIT — consulta el archivo de licencia del repositorio si se añade. Úsalo de forma responsable.
| Elemento | Detalle |
|---|
| CVE | CVE-2026-43494 |
| Nombre público | PinTheft |
| Componente | net/rds — ruta de envío zerocopy (rds_message_zcopy_from_user) |
| Primitiva | Doble put_page() cuando falla el pin de la página → robar referencias FOLL_PIN |
| Armado | Búfer fijo de io_uring + zerocopy RDS fallido → escritura UAF en la caché de páginas |
| Impacto | Root local en configuraciones vulnerables |
| Corrección oficial | e17492979319 |
| Acción | Notas |
|---|
| Parchear el kernel | Aplicar la corrección estable que contiene el commit e17492979319 |
| Deshabilitar RDS | modprobe -r rds_tcp rds (y bloquear la autocarga) si no es necesario |
| Restringir io_uring | kernel.io_uring_disabled=1 o 2 mediante sysctl |
| Mínimo privilegio | Eliminar binarios SUID innecesarios; usar contenedores con perfiles endurecidos |
| Monitoreo | Alertar ante ráfagas de fallos de zerocopy RDS + patrones de registro de búferes de io_uring |