
Linux exploit local de escalada de privilegios para CVE-2026-31431, que abusa de la API criptográfica AF_ALG con splice() para modificar la caché de páginas y lanzar una shell root.
Este repositorio contiene un pequeño PoC de escalada de privilegios local en Linux para CVE-2026-31431, también conocido como "Copy Fail".
El exploit ataca la ruta algif_aead del kernel Linux en la API criptográfica de espacio de usuario AF_ALG. Utiliza AF_ALG junto con splice() para forzar al kernel a escribir en la caché de páginas de /usr/bin/su en fragmentos de 4 bytes, y luego ejecuta su después de que la caché de páginas haya sido modificada.
El PoC en copy_fail_exp.py hace cuatro cosas:
AF_ALG para aead con la transformación
authencesn(hmac(sha256),cbc(aes)).setsockopt() utilizados en la
prueba de concepto original.splice() para mover datos del archivo objetivo a la ruta de solicitud AF_ALG,
que es la ruta defectuosa del kernel./bin/sh.El blob zlib no son datos aleatorios. Es una carga útil compacta diseñada para
reemplazar el inicio de /usr/bin/su en la caché de páginas para que la siguiente ejecución de su
genere un shell root.
El código vulnerable se introdujo en los cambios de algif_aead de la era del kernel Linux 4.14
y permaneció presente hasta el parche upstream que revierte la optimización in-place.
algif_aead in-place.AF_ALG está habilitada, que es el valor predeterminado en la
mayoría de las distribuciones Linux de propósito general.| Distribución | Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 |
6.18.226.19.127.0Las ramas LTS posteriores solo son seguras después de que el backport del proveedor llegue al paquete de kernel que realmente ejecutas.
Usa una VM de laboratorio o un host contenedor que sea tuyo. No ejecutes esto en sistemas de producción.
/usr/bin/su existe y es setuid-root.python3 copy_fail_exp.py
/usr/bin/su y luego invoca
su. Deberías terminar en un shell root o ver un prompt de root, dependiendo de
el entorno.El script no tiene dependencias adicionales más allá de la biblioteca estándar de Python 3.
python3 copy_fail_exp.py
Si quieres inspeccionar el objetivo primero, el script actualmente usa por defecto
/usr/bin/su.
Si mantienes un kernel downstream, la corrección correcta es aplicar el backport del revert upstream que elimina la optimización AEAD in-place:
a664bf3d603dc3bdcf9ae47cc21e0daec706d7a572548b093ee3.Flujo de trabajo recomendado para un árbol de kernel downstream:
git cherry-pick a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
make olddefconfig
make -j"$(nproc)"
make modules_install
make install
reboot
Si no recompilas kernels tú mismo, instala el paquete de kernel del proveedor que contenga el backport y reinicia con él.
Si el parche se retrasa, deshabilita la ruta del módulo como medida temporal:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Esto es una mitigación, no un parche.
6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |