Copy Fail (CVE-2026-31431): 732 bytes bastan para hacerse root en Linux
Un script Python de 732 bytes da acceso root en cualquier Linux desde 2017. Sin carreras de condición, sin huella en disco, sin dependencias. Acá te explicamos cómo funciona y qué hacer.

Hace una semana, el equipo de Xint publicó algo que dejó a medio mundo de sysadmins mirando la pantalla: un script Python de 732 bytes que le da acceso root a cualquier usuario sin privilegios en prácticamente cualquier servidor Linux del planeta. Sin carreras de condición. Sin compilar nada. Sin depender de la versión exacta del kernel.
Le pusieron Copy Fail. El CVE es el CVE-2026-31431.
Qué pasó exactamente
El bug vive en el subsistema criptográfico del kernel Linux, específicamente en la intersección de tres componentes:
algif_aead— la interfaz de usuario para operaciones AEAD vía sockets AF_ALGauthencesn— un wrapper AEAD usado en IPsec con soporte de número de secuencia extendidosplice()— la llamada al sistema que transfiere datos entre descriptores de archivo sin copiarlos al espacio de usuario
La historia es así: en 2011 se introdujo authencesn, que usa el buffer de destino como espacio de scratch para reorganizar bytes del número de secuencia. En 2015 el AF_ALG ganó soporte para AEAD y splice(). Y en 2017 alguien añadió una optimización de in-place para las operaciones AEAD y conectó los tres sin darse cuenta de lo que pasaba.
El resultado: cuando el exploit llama a sendmsg() + splice() con la configuración correcta, authencesn acaba escribiendo 4 bytes controlados directamente en el page cache de cualquier archivo legible del sistema. Incluidos los binarios setuid como /usr/bin/su.
Por qué es tan peligroso
Lo que hace especial a Copy Fail no es solo que funcione. Es cómo funciona.
Sin carreras de condición. La mayoría de los exploits de escalada de privilegios dependen de ganar alguna ventana de tiempo. Copy Fail no. La escritura es determinista al 100%.
Sin huella en disco. El page cache se modifica en memoria. El archivo en disco no cambia. Los checksums SHA256 siguen siendo los mismos. Un IDS que verifique integridad de binarios no detecta nada.
Sin dependencias. El exploit usa únicamente os, socket y zlib — bibliotecas estándar de Python 3.10+. Nada que instalar, nada que compilar.
Funciona en todos lados. Ubuntu, Amazon Linux, RHEL, Debian, SUSE, AlmaLinux. El mismo script, sin modificaciones. Kernels entre 4.14 y 6.19.12, es decir, cualquier distribución lanzada desde 2017.
Y el detalle más incómodo para entornos cloud y Kubernetes: el page cache es compartido. Un contenedor comprometido puede afectar a otros contenedores en el mismo host.
Cómo funciona el exploit
El flujo tiene cuatro pasos:
- Abrir un socket AF_ALG y vincularlo a
authencesn(hmac(sha256),cbc(aes)). - Construir el payload: para cada bloque de 4 bytes que se quiera escribir, crear pares
sendmsg()+splice()donde los bytes AAD 4–7 contienen el valor objetivo ysplice()entrega páginas del page cache del binario target (/usr/bin/supor defecto). - Disparar la escritura:
recvmsg()inicia la desencriptación AEAD, yauthencesnescribe los bytes controlados en el page cache del archivo. - Ejecutar:
execve("/usr/bin/su")carga el binario corrompido desde el page cache. Shell root.
El patch que cierra el bug (a664bf3d603d) es simple: revertir algif_aead.c a operación out-of-place, separando el scatterlist de origen del de destino. Fin del problema.
Línea de tiempo
| Fecha | Evento |
|---|---|
| 23 marzo 2026 | Xint reporta al equipo de seguridad del kernel Linux |
| 25 marzo 2026 | Parches propuestos y revisados |
| 1 abril 2026 | Commit a664bf3d603d integrado en mainline |
| 22 abril 2026 | CVE-2026-31431 asignado |
| 29 abril 2026 | Divulgación pública |
Qué hacer ahora
Si podés parchear, parcheá. Todas las distribuciones principales ya tienen kernels actualizados:
# Ubuntu/Debian
sudo apt update && sudo apt install --only-upgrade linux-image-generic
sudo reboot
# AlmaLinux/RHEL/Amazon Linux
sudo dnf clean metadata && sudo dnf upgrade kernel
sudo reboot
Si no podés reiniciar todavía, deshabilitá el módulo afectado:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Esto no rompe dm-crypt, LUKS, kTLS, IPsec, ni las builds estándar de OpenSSL o GnuTLS. Solo afecta a aplicaciones que usen explícitamente el engine afalg de OpenSSL — algo inusual.
Para workloads en contenedores, CERT-EU recomienda bloquear la creación de sockets AF_ALG mediante políticas seccomp. El exploit requiere ese socket como primer paso — bloquearlo lo detiene completamente incluso en kernels sin parchear.
Un detalle que vale la pena mencionar
Xint dice que encontraron la vulnerabilidad con su herramienta de IA en aproximadamente una hora, guiada por contexto sobre la entrega de páginas del page cache vía splice() al subsistema cripto. También mencionan que el mismo escaneo descubrió otros bugs de alta severidad que todavía están bajo divulgación coordinada.
Eso dice algo sobre el estado actual del análisis de seguridad asistido por IA. Bugs que llevan nueve años en el kernel, encontrados en una hora.
Conclusión
Copy Fail es fiable, silencioso y universal. La buena noticia: el parche ya existe, lleva más de un mes en mainline, y todas las distros principales lo tienen disponible. Actualizá, o al menos deshabilitá algif_aead mientras podés.
No hay mucho más que pensar.
Fuentes: