
Script Bash para evaluar la exposición de un host Linux a CVE-2026-31431, comprobar el estado del módulo del kernel, aplicar la mitigación bloqueando algif_aead y actualizar los paquetes del kernel.
Este repositorio documenta un script Bash utilizado para evaluar la exposición a CVE-2026-31431 en hosts Linux, con un enfoque en Ubuntu, y para aplicar una mitigación simple bloqueando el módulo algif_aead.
Versiones de idioma:
README.mdREADME.pt-BR.mdEl script admite tres modos:
--check: recopilar información del host y clasificar el estado actual.--mitigate: crear una regla de modprobe para bloquear el módulo vulnerable e intentar descargarlo.--update: ejecutar actualizaciones de paquetes del kernel mediante apt.CVE-2026-31431, conocida públicamente como Copy Fail, es una vulnerabilidad de escalada de privilegios local en el kernel de Linux asociada con el módulo algif_aead, que implementa la interfaz AEAD de la API criptográfica del kernel en espacio de usuario a través de AF_ALG.
En términos prácticos, el problema permite que un usuario local con bajos privilegios abuse de una falla lógica en la ruta de gestión de memoria de este subsistema y escale el impacto hasta comprometer por completo la integridad del sistema. La puntuación publicada por kernel.org y reflejada en el NVD es CVSS 7.8, con el vector AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, lo que significa que el ataque requiere ejecución local pero tiene un alto impacto en la confidencialidad, integridad y disponibilidad.
2017, cuando se añadió una optimización in-place a algif_aead.22 de abril de 2026.Copy Fail y con una prueba de concepto pública, ocurrió el 29 de abril de 2026.1 de abril de 2026, antes de la divulgación pública generalizada.Según los avisos técnicos publicados, la falla se basa en la combinación de:
AF_ALG del kernelalgif_aeadsplice()El resultado práctico es la capacidad de un proceso local para realizar una pequeña escritura controlada en páginas respaldadas por caché de página de archivos legibles. En condiciones favorables, eso es suficiente para convertir un punto de apoyo local limitado en una escalada de privilegios a root.
El riesgo real no es simplemente "ejecutar un kernel de Linux vulnerable", sino permitir que código local de baja confianza llegue a esta ruta del kernel. En entornos empresariales, eso generalmente significa una mayor exposición en:
Si un atacante ya tiene alguna forma de ejecución local, incluso sin root, este CVE puede convertirse en el siguiente paso hacia el compromiso del host. En la práctica, eso amplía el riesgo de:
algif_aeadalgif_aead forma parte de la interfaz criptográfica del kernel en espacio de usuario (AF_ALG). Permite que las aplicaciones utilicen primitivas criptográficas del kernel a través de sockets, especialmente operaciones AEAD (Cifrado Autenticado con Datos Asociados).
Este módulo generalmente no es esencial para la mayoría de las cargas de trabajo estándar de servidores. Según la guía de mitigación publicada por CERT-EU, deshabilitar algif_aead como mitigación temporal:
dm-crypt ni a LUKSkTLSIPsec/XFRMOpenSSL, GnuTLS, NSS ni SSH en uso estándarPor otro lado, deshabilitarlo puede afectar a:
afalgAF_ALG directamenteaead, skcipher o hash a través de la API criptográfica del kernelEn otras palabras, para la mayoría de los hosts corporativos, bloquear el módulo tiende a tener un impacto bajo. En appliances, stacks criptográficos personalizados o rutas de software altamente optimizadas, el impacto debe validarse antes del despliegue.
Bloquear el módulo reduce la exposición de inmediato, pero conlleva compensaciones:
AF_ALG pueden fallar al iniciar o perder la aceleración criptográfica respaldada por el kernelPara entornos de producción, el enfoque más seguro es aplicar la mitigación en una ventana de mantenimiento controlada y validar las aplicaciones críticas después.
Incluir el módulo en la lista negra es solo una mitigación temporal. La corrección permanente es:
Medidas adicionales recomendadas:
AF_ALG con seccomp en contenedores y pipelines cuando correspondaafalg o la API criptográfica del kernelEl script inspecciona:
/etc/os-releasealgif_aeadmodprobe/var/run/reboot-required)pro fix CVE-2026-31431 --dry-run, cuando esté disponibleCon base en eso, devuelve una de las siguientes clasificaciones:
PATCHED_OR_NOT_AFFECTEDLIKELY_NOT_VULNERABLEMITIGATEDVULNERABLE_MODULE_LOADEDPOTENTIALLY_VULNERABLEUNKNOWNEn resumen:
PATCHED_OR_NOT_AFFECTED.algif_aead no existe en el kernel actual, el estado tiende a ser LIKELY_NOT_VULNERABLE.MITIGATED.VULNERABLE_MODULE_LOADED.POTENTIALLY_VULNERABLE.modinfomodprobelsmodawkgrephostnameunameapt-get para --updatesudo al ejecutarse como usuario no rootpro opcionalmente, para enriquecer el análisis en UbuntuSi el archivo del script se llama check_cve_2026_31431.sh:
chmod +x check_cve_2026_31431.sh
./check_cve_2026_31431.sh --check
./check_cve_2026_31431.sh --check
Ejemplo de salida:
Host: srv-app-01
OS: Ubuntu 24.04 LTS
Kernel: 6.8.0-58-generic
CVE: CVE-2026-31431
Module exists: 1
Module loaded: 0
Module blocked: 1
Ubuntu affected: yes
Fix available: yes
Reboot required: 0
Status: MITIGATED
Reason: algif_aead exists but is blocked and not loaded
./check_cve_2026_31431.sh --check --json
Ejemplo:
{"host":"srv-app-01","os":"Ubuntu 24.04 LTS","kernel":"6.8.0-58-generic","cve":"CVE-2026-31431","module":"algif_aead","module_exists":1,"module_loaded":0,"module_blocked":1,"ubuntu_affected":"yes","fix_available":"yes","reboot_required":0,"status":"MITIGATED","reason":"algif_aead exists but is blocked and not loaded"}
Esta salida es útil para automatización, inventario de activos y pipelines de cumplimiento.
El modo --mitigate crea el archivo:
/etc/modprobe.d/disable-algif_aead-CVE-2026-31431.conf
Con el siguiente contenido:
install algif_aead /bin/false
blacklist algif_aead
Después de eso, el script intenta eliminar el módulo de la memoria con:
modprobe -r algif_aead
Uso:
./check_cve_2026_31431.sh --mitigate
Si el usuario no es root, el script intentará usar sudo.
El modo --update ejecuta:
apt-get update
apt-get install --only-upgrade -y 'linux-image-*' 'linux-modules-*' 'linux-aws*'
Uso:
./check_cve_2026_31431.sh --update
Este modo intenta actualizar los paquetes relacionados con el kernel en sistemas basados en Debian y Ubuntu. En otros entornos, este paso puede no aplicar.
./check_cve_2026_31431.sh --help
Salida:
Usage: ./check_cve_2026_31431.sh [--check|--mitigate|--update] [--json]
ubuntu_affected y fix_available dependen de la presencia del comando pro.--update utiliza patrones de paquetes orientados a Ubuntu y Debian y puede no cubrir todos los kernels personalizados.--check para evaluar el host.--mitigate.--update o aplicar la actualización oficial del proveedor.--check --json para validar el estado final y conservar evidencia.Para mayor claridad en la publicación, el script debería idealmente usar un nombre descriptivo como:
check_cve_2026_31431.sh
Material organizado y publicado con crédito a SEC17.
Sitio web oficial:
https://sec17.com