
Documentación y análisis de una vulnerabilidad de escalada de privilegios local en la plantilla authencesn del kernel de Linux mediante AF_ALG y splice(), incluyendo versiones afectadas, detección y mitigación.
Escalada de Privilegios Local en la plantilla criptográfica
authencesndel kernel de Linux medianteAF_ALG+splice().
Divulgado el 29 de abril de 2026 por Theori (Xint Code).
| Campo | Detalle |
|---|---|
| CVE | CVE-2026-31431 |
| Apodo | Copy Fail |
| CVSS | 7.8 ALTO |
| Tipo | Escalada de Privilegios Local (LPE) |
| Introducido | Kernel de Linux 4.14 (2017, commit 72548b093ee3) |
| Corregido | Commit principal a664bf3d603d |
| Requiere | Acceso local a shell sin privilegios |
| Vector remoto | Ninguno — solo local |
Una falla lógica en el envoltorio AEAD authencesn del kernel permite a un usuario local sin privilegios realizar una escritura determinista y controlada de 4 bytes en la caché de páginas de cualquier archivo legible del sistema — incluidos binarios setuid como /usr/bin/su.
La causa raíz es una optimización de procesamiento en el lugar de 2017 que colocaba páginas de la caché de páginas en una lista de dispersión (scatterlist) escribible. El algoritmo authencesn escribe 4 bytes de datos temporales fuera de su región de salida prevista durante el reordenamiento del Número de Secuencia Extendido. Debido a la estructura de scatterlist introducida por la optimización, esos 4 bytes terminan en la caché de páginas de un archivo alimentado mediante splice() — omitiendo por completo los permisos de archivo.
Sin condición de carrera. Sin reintentos. Sin riesgo de bloqueo. Determinista en todas las distribuciones probadas.
| Dirty Cow (2016) | Dirty Pipe (2022) | Copy Fail (2026) | |
|---|---|---|---|
| Requiere condición de carrera | Sí | Parcial | No |
| Específico de versión | Sí | Sí | No |
| Fiabilidad | Inestable | Moderada | Determinista |
| Cobertura de distribuciones | Limitada | Limitada | Todas desde 2017 |
Vulnerables: Kernel de Linux 4.14 hasta 6.18.21 y 6.19.x anteriores a 6.19.12.
Todas las distribuciones principales que incluyen kernels en este rango están afectadas, incluyendo:
| Distribución | Versión Probada |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |
No afectadas: Ubuntu 26.04 (Resolute) y posteriores.
Actualice a un kernel que contenga el commit principal a664bf3d603d, que revierte la optimización en el lugar de 2017.
# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y && sudo reboot
# RHEL / AlmaLinux / Amazon Linux
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# SUSE
sudo zypper refresh && sudo zypper update kernel-default && sudo reboot
algif_aead (Temporal)Si no es posible parchear de inmediato, deshabilite el módulo vulnerable para cerrar la superficie de ataque.
Nota para sistemas de la familia RHEL:
algif_aeadestá compilado dentro del kernel en RHEL/AlmaLinux/CentOS (CONFIG_CRYPTO_USER_API_AEAD=y). La solución conmodprobe.dno funciona en estos sistemas. Use el métodoinitcall_blacklisten su lugar.
Debian/Ubuntu (el módulo es cargable):
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead 2>/dev/null || true
Familia RHEL (compilado en el kernel — requiere reinicio):
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
sudo reboot
Confirme después del reinicio:
grep initcall_blacklist /proc/cmdline
| Componente | Impacto |
|---|---|
| dm-crypt / LUKS | ✅ No afectado |
| SSH | ✅ No afectado |
| IPsec / XFRM | ✅ No afectado |
| kTLS / TLS en el kernel | ✅ No afectado |
| OpenSSL / GnuTLS / NSS (compilaciones predeterminadas) | ✅ No afectado |
OpenSSL con el motor afalg habilitado explícitamente | ⚠️ Vuelve a criptografía en espacio de usuario |
Aplicaciones que enlazan sockets AF_ALG aead/skcipher/hash directamente | ⚠️ Se romperán — verifique con lsof | grep AF_ALG |
Para cargas de trabajo no confiables — contenedores, runners de CI, entornos sandbox — bloquee la creación de sockets AF_ALG mediante una política seccomp independientemente del estado del parche. Esto limita la superficie de ataque incluso en kernels vulnerables.
Verifique si algif_aead está actualmente cargado o en uso:
# Verificar si el módulo está cargado
lsmod | grep algif_aead
# Verificar si algún proceso tiene un socket AF_ALG abierto
lsof | grep AF_ALG
ss -xa | grep alg
Las firmas de detección en tiempo de ejecución están disponibles en Sysdig Secure (regla: AF_ALG Page Cache Poisoning Leading to Privilege Escalation).
| Recurso | Enlace |
|---|---|
| Entrada NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-31431 |
| Informe completo de Theori | https://xint.io/blog/copy-fail-linux-distributions |
| Sitio de Copy Fail | https://copy.fail |
| Aviso de CERT-EU | https://cert.europa.eu/publications/security-advisories/2026-005/ |
| Análisis de Sysdig | https://sysdig.com/blog/cve-2026-31431-copy-fail-linux-kernel-flaw-lets-local-users-gain-root-in-seconds |
| Cobertura de The Register | https://theregister.com/2026/04/30/linux_cryptographic_code_flaw/ |
| Notas de parche de AlmaLinux | https://almalinux.org/blog/2026-05-01-cve-2026-31431-copy-fail/ |
| KernelCare de CloudLinux | https://blog.cloudlinux.com/cve-2026-31431-copy-fail-kernel-update |
| Fecha | Evento |
|---|---|
| 2017 | Regresión introducida mediante el commit 72548b093ee3 |
| Principios de abril de 2026 | Corrección ascendente fusionada (commit a664bf3d603d) |
| 29 de abril de 2026 | Divulgación pública por Theori / Xint Code |
| 30 de abril de 2026 | Comienzan a distribuirse los parches de las distribuciones |
| 1 de mayo de 2026 | Kernels parcheados de AlmaLinux en repositorios de producción |
xD The Watcher — Red Teamer, Ethical Hacker e Investigador de Seguridad en IA
GitHub: @xd20111
Blog: yourhacker
Este repositorio documenta la vulnerabilidad con fines de investigación y defensa. Para el informe técnico autoritativo y el PoC oficial, consulte la divulgación de Theori enlazada arriba.
Si su modelo de amenazas incluye multi-tenant con kernel compartido — contenedores en un host compartido, runners de CI, granjas de compilación — el límite de aislamiento ahora es significativamente más débil hasta que se aplique el parche. El aislamiento a nivel de hardware o VM es la respuesta correcta, no los límites de namespaces.