
Herramienta de diagnóstico pasivo que comprueba si un sistema Linux es vulnerable a CVE-2026-31431 probando la accesibilidad de los sockets AF_ALG, proporcionando orientación de mitigación y códigos de salida aptos para CI.
Un script Python simple y seguro que determina si un sistema Linux es vulnerable a CVE-2026-31431 ("Copy Fail"), una escalada de privilegios local que afecta a todas las distribuciones principales desde el kernel 4.14.
CVE-2026-31431 es un error lógico de línea recta en el módulo de sockets criptográficos algif_aead del kernel de Linux. Al usar sockets AF_ALG en combinación con splice(), un atacante sin privilegios puede sobrescribir 4 bytes en la caché de páginas de un binario setuid y obtener acceso root.
| Propiedad | Detalle |
|---|
| Condición de carrera requerida | ❌ No – la explotación es determinista |
| Offsets del kernel requeridos | ❌ No – no se necesitan offsets específicos de versión |
| Complejidad de explotación | Un script Python de 732 bytes es suficiente para root |
| Este comprobador | Diagnóstico pasivo únicamente – no activa la vulnerabilidad |
El script intenta crear y vincular un socket AF_ALG usando la plantilla de algoritmo exacta en la que se basa la vulnerabilidad:
authencesn(hmac(sha256),cbc(aes))
| Resultado | Significado |
|---|---|
| Socket creado y vinculado | La ruta de código vulnerable es alcanzable – parchee inmediatamente |
EAFNOSUPPORT (errno 97) | Módulo no cargado – superficie de ataque no disponible |
Permission denied | La política MAC (SELinux/AppArmor) bloquea el acceso – seguro |
El script no activa la vulnerabilidad de ninguna manera. Es completamente pasivo y seguro de ejecutar.
Clone el repositorio o descargue check_copyfail.py, luego ejecute:
python3 check_copyfail.py
____ _____ _ _
/ ___|___ _ __ _ _| ___|_ _(_) |
| | / _ \| '_ \| | | | |_ / _` | | |
| |__| (_) | |_) | |_| | _| (_| | | |
\____\___/| .__/ \__, |_| \__,_|_|_|
|_| |___/
CVE-2026-31431 "Copy Fail" – Comprobador de Alcance
Phalanx CCS / d_0_4 | Solo uso defensivo
-------------------------------------------------------
Versión del kernel: 6.1.0-28-amd64
Rango de versión : Rango potencialmente afectado
Objetivo AF_ALG : authencesn(hmac(sha256),cbc(aes))
[!!!] SUPERFICIE DE ATAQUE VULNERABLE ALCANZABLE
Socket creado y vinculado – AF_ALG alcanzable
Mitigación inmediata:
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null
Luego actualice su kernel tan pronto como haya parches disponibles.
Corrección oficial: commit a664bf3d603d
El script sale con el código 1 si la superficie de ataque es alcanzable, y 0 si el sistema es seguro — lo que lo hace adecuado para su uso en scripts de shell, playbooks de Ansible y pipelines de CI.
Hasta que haya una actualización del kernel disponible, desactive el módulo vulnerable:
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null
La corrección oficial es el commit a664bf3d603d en el kernel principal. Actualice mediante el gestor de paquetes de su distribución tan pronto como haya parches disponibles.
Este comprobador siempre informará seguro en dispositivos Android modernos (incluido Termux). El socket AF_ALG no está disponible para aplicaciones sin privilegios debido a las políticas obligatorias de SELinux, por lo que la vulnerabilidad no es explotable en compilaciones estándar de Android.
Este proyecto está licenciado bajo la Licencia MIT – consulte LICENSE para más detalles. Siéntase libre de usar, modificar y distribuir.
Aviso legal: Esta herramienta es solo para fines de diagnóstico defensivo.
No la use en sistemas que no le pertenezcan o sin permiso escrito explícito.