Hay bugs de escalada de privilegios que dependen de ganar una carrera imposible, spray de memoria y un poco de suerte. Copy Fail no es de esos. Es un fallo de lógica determinista en el crypto del kernel de Linux que estuvo casi diez años a la vista, y que en la última semana de abril de 2026 pasó de curiosidad académica a arma real: PoC público de 732 bytes, explotación in-the-wild confirmada y un lugar en el catálogo de vulnerabilidades explotadas de CISA. Si administrás servidores Linux, esto te toca.
Copy Fail (CVE-2026-31431) es una vulnerabilidad de escalada local de privilegios en el subsistema de criptografía del kernel de Linux. Un fallo de lógica en el módulo algif_aead permite que un usuario local sin privilegios escriba 4 bytes controlados en el page cache de cualquier archivo legible —por ejemplo el binario setuid /usr/bin/su— y obtenga acceso root. Fue divulgada a fines de abril de 2026 por investigadores de Theori y Xint, con CVSS 7.8.
¿Cómo hace Copy Fail para dar root con solo 4 bytes?

Aprovecha una optimización "in-place" del kernel que reutiliza la memoria de origen como destino durante una operación criptográfica AEAD. Como lo resumió el equipo de investigación de Xint: «un usuario local sin privilegios puede escribir 4 bytes controlados en el page cache de cualquier archivo legible del sistema y usar eso para conseguir root». No hay carrera que ganar ni timing frágil: la escritura es determinista.
El ataque encadena tres piezas que por separado son legítimas:
- El socket
AF_ALG. Es la interfaz que expone la API de crypto del kernel al espacio de usuario. Cualquier proceso sin privilegios puede abrir uno y pedirle al kernel que cifre o descifre. - La plantilla AEAD
authencesnyalgif_aead. Acá vive el fallo: un error en el manejo de las scatter-gather lists hace que el kernel escriba en el offsetdst[assoclen + cryptlen], fuera de los límites previstos. - La syscall
splice(). Es el puente que mueve datos entre un pipe y el socket sin copiarlos, y lo que le permite al atacante apuntar esos 4 bytes contra el page cache de un archivo que puede leer.
El detalle clave es dónde cae la escritura: el page cache, la copia en RAM que el kernel mantiene de los archivos abiertos. Si el atacante corrompe la versión cacheada de un binario setuid-root como /usr/bin/su, el archivo en disco queda intacto —su hash no cambia— pero la copia que el kernel ejecuta ahora contiene código del atacante. Ejecutás su y salís con una shell root real. Nada tocó el disco, así que los chequeos de integridad tradicionales no ven nada.
¿De dónde salió el bug y por qué estuvo casi una década escondido?
El fallo se introdujo en 2017, en el commit 72548b093ee3 que optimizó algif_aead para operar in-place y ahorrar una copia de memoria. Esa optimización mezcló las scatter-gather lists de origen y destino (req->src y req->dst), y ahí quedó latente el 4-byte write. Según los investigadores de Xint y Theori, es explotable desde el kernel 4.14 en adelante: casi diez años de exposición.
Lo llamativo del descubrimiento es el método. El hallazgo se le atribuye a Taeyang Lee (Theori) junto al Xint Code Research Team, y se identificó usando una herramienta de descubrimiento de vulnerabilidades asistida por IA. La línea de tiempo de divulgación coordinada corrió entre marzo y fines de abril de 2026, con el parche llegando a la mainline del kernel antes de la publicación (commit de corrección a664bf3d603d, que revierte la operación AEAD a out-of-place y separa de nuevo los scatterlists de origen y destino).
¿A qué sistemas afecta y qué tan grave es en producción?
Afecta a prácticamente cualquier Linux con un kernel construido entre 2017 y 2026, es decir todas las distribuciones mayoritarias en sus líneas de kernel sin parchear: Ubuntu, Debian, RHEL y SUSE, entre otras. Los investigadores lo probaron contra kernels 6.12, 6.17 y 6.18 sobre distros actuales. La gravedad no está solo en el alcance, sino en la combinación de propiedades que rara vez se juntan.
- Es confiable. Al ser un error de lógica y no una race condition, el exploit funciona de forma determinista, sin reintentos ni riesgo de tumbar el sistema con un kernel panic.
- Es portátil y minúsculo. El PoC público es un script de Python de 732 bytes que solo usa la librería estándar (
os,socket,zlib) y corre en Python 3.10+. No necesita compilar nada ni traer dependencias. - Es silencioso. Como corrompe el page cache y no el archivo en disco, no deja rastro para las herramientas de integridad de archivos (FIM) que comparan hashes en reposo.
- Habilita fuga de contenedores. Un proceso sin privilegios dentro de un contenedor que pueda abrir sockets
AF_ALGpuede usar Copy Fail para escalar en el host, no solo dentro del contenedor.
El salto a "problema de todos" fue rápido: CISA lo agregó a su catálogo de vulnerabilidades explotadas (KEV) el 1 de mayo de 2026 por explotación activa, y equipos de investigación reportaron actividad de testing y explotación en la práctica pocos días después de la publicación. En un servidor multiusuario o en cualquier plano de cómputo compartido, el modelo de amenaza es directo: si un atacante logra ejecución de código como usuario común —vía una app web comprometida, una credencial filtrada o un contenedor mal aislado—, Copy Fail le entrega root sin fricción.
¿Qué podés hacer HOY para protegerte?
Actualizá el kernel a una versión parcheada; es la única solución completa. La corrección ya está en la mainline y se fue backporteando a las líneas estables de cada distro. Los pasos concretos:
- Verificá tu kernel actual. Corré
uname -ry compará contra la versión parcheada de tu distribución. Las correcciones se publicaron en las series 6.18.x, 6.19.x y 7.0 de la mainline; el número exacto para tu distro tenés que verificarlo en su aviso de seguridad oficial. - Aplicá el update y reiniciá. Un
apt/dnf/zypperdel paquete de kernel no basta si no rebooteás al kernel nuevo (o usás live patching donde esté disponible). El kernel viejo sigue corriendo hasta el reinicio. - Si no podés parchear ya, mitigá. La superficie de ataque es el módulo de crypto: deshabilitalo o bloqueá la creación de sockets
AF_ALG.
Para la mitigación temporal, bloquear la carga del módulo cierra el vector para cualquier proceso que no lo tenga ya cargado:
# Ver la versión de kernel en ejecución
uname -r
# Impedir que el módulo algif_aead se cargue (mitigación, no reemplaza el parche)
echo "install algif_aead /bin/true" | sudo tee /etc/modprobe.d/disable-algif_aead.conf
# Si ya está cargado y ningún servicio legítimo lo necesita, descargarlo
sudo rmmod algif_aead 2>/dev/null || trueAntes de aplicar esto en producción, confirmá que ninguna app tuya use la API de crypto del kernel vía AF_ALG (algunos stacks de disk encryption y VPN la tocan). En entornos con contenedores, sumá una policy de seccomp que bloquee la syscall socket() para la familia AF_ALG, así ningún proceso del contenedor puede siquiera abrir el socket vulnerable.
¿Cómo detecto si ya me explotaron?
Como el disco no cambia, olvidate del FIM clásico. La señal de detección más útil es de comportamiento: procesos sin privilegios abriendo sockets AF_ALG y usando splice() de forma anómala, o binarios setuid ejecutándose con un contenido de page cache que no coincide con el archivo en disco. Varios equipos publicaron reglas de detección basadas en esta secuencia de syscalls tras la divulgación. Revisá también accesos root inesperados en tus logs de auditoría alrededor de la ventana de exposición.
Cómo se relaciona con otros bugs recientes de Linux
Copy Fail entra en una racha de fallos de "root oculto por años" en el kernel. Si te interesa el patrón, en este mismo blog cubrimos GhostLock (CVE-2026-43499), otro camino a root que estuvo 15 años latente, y la tanda de CVEs de OpenSSH parcheados a mediados de 2026. La lección transversal es la misma: la antigüedad de un componente no es garantía de que sea seguro, y el page cache es un objetivo tan válido como el disco.
Preguntas frecuentes
¿Copy Fail se puede explotar de forma remota?
No. Es una escalada de privilegios local: el atacante necesita ya poder ejecutar código como usuario sin privilegios en la máquina. El riesgo real aparece encadenado a otra falla que dé ese acceso inicial (una app web vulnerable, una credencial robada o un contenedor mal aislado).
¿Qué puntaje CVSS tiene?
Tiene un CVSS de 7.8 (alto). El puntaje no llega a "crítico" porque requiere acceso local, pero su confiabilidad, portabilidad y baja detectabilidad lo vuelven mucho más peligroso en la práctica de lo que sugiere el número, y por eso CISA lo sumó al catálogo KEV.
¿Desde qué versión del kernel está el bug?
Desde la 4.14 (2017), cuando se introdujo la optimización in-place en algif_aead con el commit 72548b093ee3. Cualquier kernel construido entre 2017 y la fecha del parche de tu distro es potencialmente vulnerable.
¿Alcanza con deshabilitar el módulo o tengo que parchear igual?
Deshabilitar algif_aead es solo una mitigación temporal para ganar tiempo. La única solución real es actualizar a un kernel parcheado y reiniciar. Tratá la mitigación como un torniquete, no como la cura.
¿Cómo sé si mi kernel ya está parcheado?
Corré uname -r y comparalo contra el número de versión indicado en el aviso de seguridad oficial de tu distribución para CVE-2026-31431. No confíes en la fecha del paquete: verificá que estés ejecutando el kernel nuevo, no solo que esté instalado.
Fuentes: