
CVE-2026-31431 Copy Fail — probador de LPE del kernel de Linux mediante MCP
📖 Guía de instalación — inicio rápido, configuración manual y solución de problemas
CVE-2026-31431 — La peor vulnerabilidad de Linux jamás descubierta. Ahora controlable mediante MCP.
732 bytes de Python. Sin compilación. Sin condición de carrera. Sin offsets por distribución. Un solo disparo, root universal en todos los kernels de Linux construidos desde 2017.
Esta herramienta es un servidor MCP + panel web que prueba cualquier sistema Linux alcanzable para detectar la vulnerabilidad. Se creó porque el PoC original ya es trivial de usar — esto solo añade una interfaz, escaneo de red y seguimiento de flotas.
ADVERTENCIA: Este es un LPE real del kernel. Úsalo únicamente en sistemas que poseas o sobre los que tengas permiso explícito por escrito para realizar pruebas. El uso no autorizado es un delito grave en la mayoría de las jurisdicciones.
1. Fue encontrado por una IA en una hora.
La plataforma Xint Code de Theori escaneó el subsistema crypto/ de Linux con una
única indicación del operador. Una hora después, tenía un LPE universal que había eludido
a todo revisor humano, herramienta de análisis estático y fuzzer durante nueve años. El error
existía desde 2017 y requería razonamiento entre subsistemas (procedencia del socket AF_ALG +
comportamiento de escritura basura de authencesn) — exactamente el tipo de conexión en el que las
herramientas nativas de LLM sobresalen. El costo del descubrimiento fue insignificante. Las implicaciones
para el panorama de vulnerabilidades son existenciales.
2. El exploit son 732 bytes de Python puro, sin dependencias. No se necesita cadena de compilación. Ni bibliotecas que instalar. Sin offsets específicos de arquitectura. Funciona de forma idéntica en servidores x86_64, routers aarch64, dispositivos NAS ARM y cualquier otro hardware Linux que ejecute Python 3.10+. Puedes pegarlo en una shell web, enviarlo por netcat o escribirlo desde un USB. La barrera para la weaponización es efectivamente cero.
3. No deja rastro en disco.
El exploit corrompe solo la caché de páginas en memoria del kernel. El binario en disco de
/usr/bin/su nunca se modifica. Toda herramienta de integridad de archivos que funcione comparando
checksums en disco — AIDE, Tripwire, dm-verity — no ve nada anómalo. La corrupción
desaparece al reiniciar. La única forma de detectar que un exploit se ejecutó es atraparlo
en vuelo mediante auditd o eBPF. A efectos forenses, el exploit es invisible.
4. Miles de millones de dispositivos nunca serán parcheados.
Las principales distribuciones (Ubuntu, RHEL, Debian, SUSE) publicaron parches en 72 horas.
Pero el error del kernel está integrado en todos los dispositivos Linux construidos desde 2017 que tengan
CONFIG_CRYPTO_USER_API_AEAD=y — que son prácticamente todos. Routers OpenWrt
(sin parche a fecha de 2026-05-02). Cámaras IP que ejecutan kernels de fabricante de 2019. Smart TVs
con ramas de firmware congeladas. Bombas de infusión médica que requieren recertificación de la FDA
para cada actualización. Controladores industriales con ciclos de soporte de 10 años. Los dispositivos
Android están protegidos por una restricción de política de SELinux accidental — no por un arreglo
del kernel — y los dispositivos rooteados/con ROM personalizada, las tablets Fire antiguas y los sticks
de Android TV están completamente expuestos. El número total no son millones. Son miles de millones.
Y para la mayoría de ellos, el parche nunca llegará.
Esta es una herramienta de pruebas de seguridad y concienciación construida alrededor del PoC público. No hace nada que el script original de 732 bytes no haga ya. Lo que añade:
El exploit en sí es público, trivialmente copiable y no puede dejar de ser descubierto. Esta herramienta existe para hacer que las pruebas sean rápidas y seguras para quienes tienen autorización para probar.
git clone https://github.com/sandraschi/copy-fail-mcp
cd copy-fail-mcp
just
Esto abre un panel interactivo que muestra todos los comandos disponibles. Ejecuta just bootstrap para instalar las dependencias, y luego just serve o just dev para comenzar.
Si no tienes just instalado:
pip install copy-fail-mcp
copy-fail check --host 192.168.1.100
copy-fail serve --http --port 10955
User → AF_ALG socket (authencesn) → splice() target file → HMAC fails
↓
4 bytes written past AEAD boundary
↓
Into page cache of /usr/bin/su
↓
su is now corrupted in memory
↓
Run su → root shell
El error: dos comportamientos de subsistema que eran inofensivos por separado se vuelven letales al combinarse. La ruta de splice de AF_ALG expone las páginas de la caché de páginas como salida escribible. authencesn escribe 4 bytes más allá del límite legítimo de AEAD como espacio de trabajo. Júntalos y puedes corromper la representación en memoria de cualquier archivo legible con datos precisamente controlados. El exploit apunta a la comprobación de permisos de /usr/bin/su.
MIT. El script del exploit es de Taeyang Lee / Theori / Xint Code Research Team (PoC original).
| Propiedad | Copy Fail | Dirty COW (2016) | Dirty Pipe (2022) |
|---|
| Tamaño del exploit | 732 bytes (stdlib de Python) | ~200 líneas de C | ~100 líneas de C |
| Compilación necesaria | No — Python puro | Sí — compilar C | Sí — compilar C |
| Condición de carrera | No — determinista | Sí — ventana de carrera | No |
| Offsets por distribución | Ninguno — el mismo script en todas partes | Ninguno | Ninguno |
| Rastro en disco | No — solo caché de páginas, checksums limpios | No | No |
| Escape de contenedor | Sí — caché de páginas compartida | Sí | Sí |
| Versiones del kernel | >= 4.14 (2017–presente) | >= 2.6.22 (2007–2018) | >= 5.8 (2020–2022) |
| Dispositivos afectados | Miles de millones (aún en aumento) | Corregido en 2018 | Corregido en 2022 |
| Nunca será parcheado | Miles de millones de IoT/embebidos/routers | Mayormente parcheado | Mayormente parcheado |
| Descubierto por | IA (Xint Code, escaneo de 1 hora) | Investigador humano | Investigador humano |
| Costo del descubrimiento | ~$6 en cómputo en la nube | Meses de esfuerzo humano | Meses de esfuerzo humano |
| Herramienta | Descripción | Entrada |
|---|
cf_scan_network | Sondear subred /24 en busca de hosts SSH, identificar Linux | Directo (TCP asíncrono) |
cf_check_target | Comprobar kernel, configuración AEAD, estado del parche de la distribución | Agente SSH |
cf_run_exploit | Desplegar PoC vía SSH, ejecutar, informar root | Agente SSH |
cf_assess | Comprobar + explotar en un solo paso | Agente SSH |
cf_apply_mitigation | Lista negra de módulos o de initcall | Agente SSH |
cf_get_exploit_script | Devolver el PoC crudo de 732 bytes como texto | Cualquier canal |
cf_exploit_local | Escribir el PoC en una ruta local para despliegue manual | Shell local |