
Exploit para CVE-2026-31431, un fallo de authencesn en el kernel de Linux que permite la escalada local de privilegios y la fuga de contenedores mediante una escritura de 4 bytes en la caché de páginas.
732 bytes para root en todas las principales distribuciones de Linux
CVE-2026-31431 (Copy Fail) es un error lógico en la plantilla criptográfica authencesn del kernel de Linux. Permite que un usuario local sin privilegios provoque una escritura determinista y controlada de 4 bytes en la caché de páginas de cualquier archivo legible del sistema.
CONFIG_CRYPTO_AUTHENC (prácticamente todas las principales distribuciones desde 2017)El error encadena dos comportamientos:
AF_ALG + splice: splice() transfiere páginas de la caché de páginas por referencia al scatterlist de un socket AF_ALG. Para el modo de descifrado AEAD in-place, las páginas de etiqueta (de la caché de páginas del archivo objetivo) permanecen encadenadas al scatterlist de salida mediante sg_chain().
Escritura scratch de authencesn: crypto_authenc_esn_decrypt() usa dst[assoclen + cryptlen] (más allá de la etiqueta, dentro de las páginas de la caché de páginas) como espacio scratch para la reorganización del número de secuencia ESN, escribiendo 4 bytes controlados por el atacante y nunca restaurándolos.
La página corrupta nunca se marca como sucia, por lo que el archivo en disco permanece sin cambios. Pero la caché de páginas en memoria es lo que realmente se lee, lo que hace que la corrupción sea inmediatamente visible en todo el sistema.
El exploit corrompe la caché de páginas de /usr/bin/su (o cualquier binario setuid) con un pequeño payload de shellcode, 4 bytes a la vez. Después de todas las iteraciones, ejecutar su ejecuta el payload y otorga una shell root.
python3 exp.py
gcc -o exp exp.c
./exp
| Capacidad | Detalles |
|---|---|
Este repositorio se publica únicamente con fines educativos y de investigación defensiva. No utilice este código en sistemas que no sean de su propiedad o para los que no tenga permiso explícito de prueba.
| Portátil |
| El mismo script funciona en Ubuntu, Amazon Linux, RHEL, SUSE y más — sin offsets específicos por distribución |
| Diminuto | El exploit en Python tiene ~732 bytes |
| Sigiloso | Evita la ruta de escritura de VFS; la página nunca se marca como sucia; las sumas de verificación en disco no cambian |
| Entre contenedores | La caché de páginas se comparte entre contenedores — vector de escape de contenedor (ver Parte 2) |