
Exploit de escalada de privilegios local para CVE-2026-31431 (Copy Fail) dirigido a la corrupción de la caché de páginas del kernel de Linux a través del módulo AF_ALG AEAD. Incluye PoC, reglas de detección, configuración de laboratorio y scripts de mitigación para pruebas de seguridad autorizadas.
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead
-yellow?style=for-the-badge&logo=linux&logoColor=black)
⚠️ SOLO PARA USO AUTORIZADO — Este repositorio está estrictamente destinado a probadores de penetración, investigadores de seguridad y defensores que operan bajo autorización legal. El uso indebido es un delito penal.
Copy Fail es una vulnerabilidad de escalada local de privilegios (LPE) divulgada el 29 de abril de 2026, que afecta prácticamente a todas las principales distribuciones de Linux que ejecutan kernels desde 2017.
Usuario sin privilegios ──► AF_ALG + splice() ──► Escritura de 4 bytes en el caché de páginas ──► ROOT
La vulnerabilidad proviene de una optimización in situ defectuosa introducida en 2017 (commit 72548b093ee3) dentro del módulo algif_aead de la API criptográfica de espacio de usuario del kernel de Linux (AF_ALG).
AF_ALG (API criptográfica de espacio de usuario)
└── módulo algif_aead
└── plantilla authencesn ◄── VULNERABLE
└── optimización in situ (2017)
└── req->src == req->dst ◄── páginas de splice() encadenadas en una lista de dispersión de dst escribible
Paso 1: Abrir socket AF_ALG AEAD
socket(AF_ALG, SOCK_SEQPACKET, 0)
Paso 2: Enviar páginas de splice() que referencian el archivo objetivo
(páginas del caché de páginas de un binario privilegiado, p.ej. /usr/bin/sudo)
Paso 3: Activar escritura temporal de authencesn
authencesn usa el buffer dst como área de trabajo →
escribe 4 bytes controlados MÁS ALLÁ de la región de salida legítima
Paso 4: La entrada del caché de páginas para el archivo objetivo ahora está corrupta
(archivo en disco intacto — solo se modificó la copia en memoria)
Paso 5: Ejecutar el binario modificado → ROOT
El caché de páginas del kernel de Linux respalda las copias en memoria de los archivos. Cuando se lee un archivo, sus páginas se almacenan en caché. La llamada al sistema splice() puede referenciar directamente estas páginas cacheadas. Al alimentar páginas del caché de páginas en la lista de dispersión de AF_ALG AEAD, la escritura temporal de authencesn cae dentro de esas páginas cacheadas, parcheando efectivamente la copia en memoria de cualquier archivo legible — incluyendo binarios privilegiados como sudo, pkexec o passwd.
El parche ascendente revierte la optimización defectuosa de 2017:
# Corregido en el commit: a664bf3d603d
git show a664bf3d603d
CVE-2026-31431-CopyFail/
│
├── 📄 README.md ← Usted está aquí
├── 📄 LICENSE ← Licencia de investigación/educativa
├── 📄 DISCLAIMER.md ← Política de uso legal y ético
├── 📄 CHANGELOG.md ← Historial de versiones
│
├── 📂 docs/
│ ├── vulnerability-analysis.md ← Análisis profundo: causa raíz y mecánica
│ ├── exploitation-walkthrough.md ← Metodología paso a paso
│ ├── affected-kernels.md ← Matriz completa de versiones de kernel/distribuciones
│ ├── detection.md ← Cobertura de Defender, Tenable, Wazuh
│ └── references.md ← Todos los CVEs, blogs, avisos
│
├── 📂 exploit/
│ ├── README.md ← Uso, requisitos previos, distribuciones probadas
│ ├── copyfail.py ← PoC de referencia (educativo)
│ ├── trigger.c ← Disparador C de AF_ALG + splice()
│ └── variants/
│ ├── ubuntu.py ← Variante específica para Ubuntu
│ ├── rhel.py ← Variante para RHEL/CentOS
│ └── amazon_linux.py ← Variante para Amazon Linux
│
├── 📂 detection/
│ ├── yara/
│ │ └── copyfail.yar ← Regla YARA para artefactos del exploit
│ ├── sigma/
│ │ └── copyfail_lpe.yml ← Regla Sigma para SIEM/SOC
│ └── scripts/
│ ├── check_vulnerable.sh ← Verificación rápida de vulnerabilidad del kernel
│ └── detect_algif_aead.sh ← Verificar si el módulo está cargado/activo
│
├── 📂 mitigation/
│ ├── README.md ← Resumen de mitigación
│ ├── disable_algif_aead.sh ← Deshabilitar el módulo del kernel afectado
│ ├── patch-notes.md ← Detalles del parche ascendente
│ └── kubernetes-hardening.md ← Endurecimiento de K8s / contenedores
│
├── 📂 lab/
│ ├── Vagrantfile ← MV vulnerable reproducible
│ ├── setup.sh ← Script de arranque del laboratorio
│ └── docker/
│ └── Dockerfile ← Contenedor Ubuntu vulnerable
│
├── 📂 reports/
│ ├── pentest-report-template.md ← Plantilla de informe lista para el cliente
│ └── sample-finding.md ← Ejemplo de redacción de hallazgo
│
└── 📂 assets/
├── demo.gif ← (Opcional) demostración en terminal
└── diagrams/
└── page-cache-write.png ← Diagrama del flujo del ataque
Siempre pruebe en un entorno aislado y autorizado. Nunca ejecute exploits en sistemas de producción.
# Clonar el repositorio
git clone https://github.com/0xFuffM3/CVE-2026-31431-CopyFail.git
cd CVE-2026-31431-CopyFail
# Iniciar la MV de laboratorio vulnerable
cd lab/
vagrant up
# SSH al laboratorio
vagrant ssh
# Verificar la versión del kernel (debería ser vulnerable)
uname -r
cd lab/docker/
# Construir la imagen del contenedor vulnerable
docker build -t copyfail-lab .
# Ejecutar con los privilegios necesarios para la interacción con el kernel
docker run --rm -it --privileged copyfail-lab /bin/bash
# Ejecutar el script de verificación rápida
chmod +x detection/scripts/check_vulnerable.sh
./detection/scripts/check_vulnerable.sh
Salida esperada en un sistema vulnerable:
[!] Versión del kernel: 5.15.0-91-generic
[!] Módulo algif_aead: CARGADO
[✗] El sistema parece VULNERABLE a CVE-2026-31431 (Copy Fail)
[*] Acción recomendada: Aplicar actualización del kernel o deshabilitar algif_aead
Salida esperada en un sistema parcheado:
[✓] Versión del kernel: 6.1.132
[✓] El sistema parece PARCHEADO contra CVE-2026-31431 (Copy Fail)
Requiere: Acceso local como usuario sin privilegios en un sistema vulnerable.
# Python 3.6+
python3 --version
# Módulos del kernel requeridos presentes
lsmod | grep algif_aead
# Verificar que el binario objetivo sea legible
ls -la /usr/bin/sudo
cd exploit/
# Verificar el nivel de privilegio actual
id
# uid=1000(usuario) gid=1000(usuario) groups=1000(usuario)
# Ejecutar PoC de Copy Fail
python3 copyfail.py
# Verificar la escalada de privilegios
id
# uid=0(root) gid=0(root) groups=0(root)
1. Enumerar la versión del kernel
└─► uname -r / cat /proc/version
2. Verificar si algif_aead está cargado
└─► lsmod | grep algif_aead
3. Confirmar punto de apoyo con bajos privilegios
└─► id / whoami
4. Ejecutar PoC de Copy Fail
└─► python3 exploit/copyfail.py
5. Verificar acceso root
└─► id && cat /etc/shadow
6. Documentar evidencia
└─► Captura de pantalla + registrar versión del kernel, distribución, hash del exploit
7. Aplicar mitigación (después de la prueba)
└─► sudo bash mitigation/disable_algif_aead.sh
8. Incluir en el informe de pentest
└─► Usar reports/pentest-report-template.md
// detection/yara/copyfail.yar
rule CopyFail_CVE_2026_31431 {
meta:
description = "Detecta artefactos del exploit Copy Fail (CVE-2026-31431)"
author = "0xFuffM3"
date = "2026-04-30"
reference = "https://copy.fail"
strings:
$py1 = "algif_aead" ascii
$py2 = "AF_ALG" ascii
$py3 = "splice" ascii
$py4 = "page_cache" ascii
$py5 = "authencesn" ascii
condition:
3 of them
}
Ejecutar escaneo YARA:
yara detection/yara/copyfail.yar /tmp/ -r
# detection/sigma/copyfail_lpe.yml
title: Ejecución de Exploit LPE Copy Fail (CVE-2026-31431)
status: stable
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'AF_ALG'
- 'algif_aead'
- 'authencesn'
condition: selection
falsepositives:
- Pruebas legítimas de API criptográfica
level: high
chmod +x detection/scripts/detect_algif_aead.sh
./detection/scripts/detect_algif_aead.sh
# Ubuntu / Debian
sudo apt-get update && sudo apt-get upgrade linux-image-generic
# RHEL / CentOS
sudo yum update kernel
# Amazon Linux
sudo yum update kernel
# Después de la actualización, reiniciar
sudo reboot
algif_aead (Temporal)# Ejecutar el script de mitigación
chmod +x mitigation/disable_algif_aead.sh
sudo bash mitigation/disable_algif_aead.sh
Lo que hace el script:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || echo "[*] Módulo no cargado actualmente"
echo "[✓] algif_aead deshabilitado. Reiniciar para confirmar persistencia."
Consulte mitigation/kubernetes-hardening.md para:
AF_ALG en políticas de seguridad de podssocket(AF_ALG, ...)Una plantilla de informe lista para el cliente está disponible en reports/pentest-report-template.md.
Hallazgo: Escalada Local de Privilegios mediante Copy Fail (CVE-2026-31431)
Severidad: ALTA (CVSS 7.8)
Host: 10.10.10.55 (ubuntu-prod-01)
Kernel: 5.15.0-91-generic
Evidencia:
- Shell sin privilegios (uid=1000) escalado a root (uid=0)
- Módulo del kernel algif_aead confirmado como cargado
- Sin artefactos en disco — solo caché de páginas
Recomendación:
1. Aplicar el parche del kernel del proveedor inmediatamente
2. Temporal: deshabilitar el módulo algif_aead
3. Revisar nodos de Kubernetes y ejecutores de CI/CD
Lea antes de usar cualquier cosa en este repositorio.
Este repositorio se publica únicamente con fines de investigación de seguridad legítima, pruebas de penetración autorizadas y seguridad defensiva.
El uso no autorizado de este material puede violar la Ley de Abuso y Fraude Informático (CFAA), la Directiva de la UE 2013/40/UE, la Ley de TI de la India de 2000 y leyes equivalentes en su jurisdicción.
Los autores no asumen ninguna responsabilidad por el uso indebido. Consulte DISCLAIMER.md para el aviso legal completo.
Investigadores de seguridad son bienvenidos a contribuir:
git checkout -b feat/tu-contribuciongit commit -m "Añadir: regla de detección para X"Por favor, siga las normas de divulgación responsable. No incluya código de exploit armado y listo para producción dirigido a sistemas parcheados.
| # | Sección | Descripción |
|---|
| 1 | ¿Qué es Copy Fail? | Resumen de la vulnerabilidad |
| 2 | Análisis Técnico Profundo | Análisis de la causa raíz |
| 3 | Sistemas Afectados | Matriz de distribuciones y kernels |
| 4 | Estructura del Repositorio | Organización de archivos |
| 5 | Configuración del Laboratorio | Reproducir de forma segura |
| 6 | Uso del Exploit | Flujo de trabajo de pentest |
| 7 | Detección | YARA, Sigma, scripts |
| 8 | Mitigación | Parche y endurecimiento |
| 9 | Informes de Pentest | Plantillas de informes |
| 10 | Legal y Ética | Descargo de responsabilidad |
| 11 | Referencias | CVEs, avisos, blogs |
| Propiedad | Detalle |
|---|
| ID CVE | CVE-2026-31431 |
| Apodo | Copy Fail |
| CVSS v3.1 | 7.8 (ALTA) |
| Vector de Ataque | Local |
| Privilegios Requeridos | Bajos (cualquier usuario sin privilegios) |
| Interacción del Usuario | Ninguna |
| Descubridor | Xint Code (Theori) |
| Divulgado | 29 de abril de 2026 |
| Tamaño del Exploit | 732 bytes (PoC en Python) |
| Estado del Parche | ✅ Disponible — revertir el commit a664bf3d603d |
| Rama del Kernel | ¿Afectado? | Versión Corregida |
|---|
| 4.9.x (LTS) | ✅ Sí | 4.9.340+ |
| 5.4.x (LTS) | ✅ Sí | 5.4.295+ |
| 5.10.x (LTS) | ✅ Sí | 5.10.239+ |
| 5.15.x (LTS) | ✅ Sí | 5.15.185+ |
| 6.1.x (LTS) | ✅ Sí | 6.1.132+ |
| 6.6.x (LTS) | ✅ Sí | 6.6.83+ |
| 6.12.x (LTS) | ✅ Sí | 6.12.19+ |
| < 4.9 (pre-2017) | ❌ No | N/A — optimización no presente |
| Distribución | Versiones Afectadas | ¿Parcheado? | Aviso |
|---|
| Ubuntu | < 26.04 (todas las versiones) | ✅ Parcheado | USN |
| Ubuntu 26.04 (Resolute) | ❌ No afectado | — | — |
| RHEL / CentOS | 7, 8, 9 | ✅ Parcheado | RHSA-2026 |
| Amazon Linux | 2, 2023 | ✅ Parcheado | ALAS |
| SUSE / openSUSE | Todas afectadas | ✅ Parcheado | SUSE-SU |
| Debian | Bullseye, Bookworm | ✅ Parcheado | DSA |
| CloudLinux | 8, 9 | ✅ Parcheado | Aviso |
| Herramienta | Soporte de Detección |
|---|
| Microsoft Defender (MDVM) | ✅ Sí |
| Tenable Nessus | ✅ Sí |
| Qualys | ✅ Sí |
| Wazuh | ✅ Mediante regla Sigma personalizada |
| Palo Alto Cortex XDR | ✅ Sí |
| CrowdStrike Falcon | ✅ Sí |
| Fuente | Enlace |
|---|
| Divulgación Original (Xint/Theori) | copy.fail |
| Artículo Técnico de Xint Code | xint.io/blog/copy-fail |
| Entrada NVD | nvd.nist.gov |
| Blog de Seguridad de Microsoft | microsoft.com/security/blog |
| Aviso de Ubuntu | ubuntu.com/blog |
| Aviso de CERT-EU | cert.europa.eu |
| Preguntas Frecuentes de Tenable | tenable.com/blog |
| Palo Alto Unit 42 | unit42.paloaltonetworks.com |
| Aviso de CloudLinux | blog.cloudlinux.com |
| Análisis de Bugcrowd | bugcrowd.com/blog |
| Parche del Kernel de Linux | kernel.org — commit a664bf3d603d |