
Exploit determinista de escalada local de privilegios en el kernel de Linux que encadena dos primitivas de escritura de page-cache (xfrm/ESP y RxRPC) para obtener acceso root fiable en todas las principales distribuciones desde 2017.
Escalada local de privilegios universal en el kernel de Linux
| Campo | Detalle |
|---|---|
| CVE | CVE-2026-43284 (xfrm/ESP) + CVE-2026-43500 (RxRPC) |
| Apodo | Dirty Frag |
| CVSS | 7.8 HIGH |
| Tipo | Escalada local de privilegios (LPE) |
| Introducido | kernel de Linux 4.10 (2017, commit cac2661c53f3) |
| Corregido | Commits de mainline f4c50a4034e6 / aa54b1d27fe0 |
| Requiere | Acceso local a un shell sin privilegios |
| Vector remoto | Ninguno — solo local |
| Divulgado | 7 de mayo de 2026 por Hyunwoo Kim (@v4bel) |
Un fallo de lógica en los subsistemas xfrm/ESP y RxRPC del kernel de Linux permite a un usuario local sin privilegios realizar una escritura arbitraria controlada y determinista en la caché de páginas de cualquier archivo legible del sistema, incluidos binarios setuid como /usr/bin/su.
La causa raíz es el descifrado in situ inseguro de fragmentos de buffer de socket compartido (skb) que hacen referencia a páginas de la caché de páginas, especialmente cuando se utiliza splice(2) o sendfile(2). Esto proporciona una potente primitiva de escritura arbitraria en la caché de páginas, que puede aprovecharse para sobrescribir archivos sensibles en memoria y lograr acceso root completo.
Se encadenan dos primitivas distintas para lograr una cobertura universal:
xfrm-ESP Page-Cache Write: comparte el mismo sumidero que Copy Fail, pero se desencadena a través de los módulos esp4/esp6, independientemente de si algif_aead está disponible. Requiere privilegios de creación de namespaces.RxRPC Page-Cache Write: no requiere privilegios de namespace, pero debe estar presente rxrpc.ko (cargado por defecto en Ubuntu). Cubre los puntos ciegos de CVE-2026-43284.Encadenar ambas variantes hace que cubran mutuamente sus puntos ciegos, logrando root fiable en todas las distribuciones principales.
Sin condiciones de carrera. Sin reintentos. Sin riesgo de crash. Determinista en todas las distribuciones probadas.
Importante: Incluso en sistemas donde se aplica la mitigación pública conocida de Copy Fail (lista negra de
algif_aead), Dirty Frag sigue siendo explotable mediante CVE-2026-43284.
algif_aead (solución de Copy Fail)CVE-2026-43284 (xfrm/ESP): kernel de Linux desde el commit cac2661c53f3 (2017-01-17) hasta f4c50a4034e6 (2026-05-05).
CVE-2026-43500 (RxRPC): kernel de Linux desde el commit 2dc334f1a63a (2023-06-08) hasta aa54b1d27fe0 (2026-05-10).
La vida útil efectiva de la cadena de vulnerabilidades es de aproximadamente 9 años.
Todas las principales distribuciones que incluyen kernels dentro de este rango están afectadas, entre ellas:
gcc -O0 -Wall -o exp exp.c -lutil && ./exp
No lo utilices en sistemas en los que no estés autorizado a realizar pruebas.
⚠️ Importante: Después de ejecutar este exploit, la caché de páginas queda contaminada. Para limpiar la caché de páginas contaminada y garantizar la estabilidad del sistema, ejecuta:
echo 3 > /proc/sys/vm/drop_caches
o reinicia el sistema.
Actualiza a un kernel que contenga las correcciones de mainline y reinicia.
Corregido en mainline mediante:
f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y && sudo reboot
# RHEL / AlmaLinux / CentOS Stream
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# SUSE / openSUSE
sudo zypper refresh && sudo zypper update kernel-default && sudo reboot
# Fedora
sudo dnf upgrade --refresh && sudo reboot
Si no es posible parchear de inmediato, deshabilita los módulos vulnerables y limpia la caché de páginas.
# Blacklist vulnerable modules
sudo sh -c 'printf "install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n" > /etc/modprobe.d/dirtyfrag.conf'
# Unload modules immediately
sudo rmmod esp4 esp6 rxrpc 2>/dev/null || true
# Drop page cache
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
Para cargas de trabajo no confiables — contenedores, runners de CI, entornos limitados (sandbox) — restringe la creación de sockets AF_ALG y splice() mediante políticas seccomp o AppArmor, independientemente del estado del parche. Esto limita la superficie de ataque incluso en kernels vulnerables, pero no es una solución completa.
Comprueba si los módulos vulnerables están cargados o en uso:
# Check if modules are loaded
lsmod | grep -E 'esp4|esp6|rxrpc'
# Check if any process has an AF_ALG socket open
lsof | grep AF_ALG
ss -xa | grep alg
# Confirm workaround is active after reboot
cat /etc/modprobe.d/dirtyfrag.conf
¿Por qué encadenar dos vulnerabilidades?
xfrm-ESP Page-Cache Write proporciona una potente primitiva STORE arbitraria de 4 bytes y está presente en la mayoría de las distribuciones, pero requiere privilegios de creación de namespaces — que Ubuntu a veces bloquea mediante AppArmor. RxRPC Page-Cache Write no requiere privilegios de namespace, pero rxrpc.ko no está incluido en la mayoría de las distribuciones — excepto Ubuntu, donde se carga por defecto. Encadenar ambas hace que sus puntos ciegos se cubran mutuamente, logrando root fiable en todas las distribuciones principales.
¿Qué relación tiene con Copy Fail (CVE-2026-31431)?
La primitiva xfrm-ESP comparte el mismo sumidero de escritura en la caché de páginas que CVE-2026-31431, pero se desencadena a través de los módulos esp4/esp6 independientemente de algif_aead. Aplicar la mitigación de CVE-2026-31431 (incluir algif_aead en la lista negra) no protege contra Dirty Frag.
¿Por qué el nombre «Dirty Frag»?
La vulnerabilidad ensucia el miembro frag de struct sk_buff, situándola en la misma clase de fallos que Dirty Pipe — fallos de lógica que permiten escrituras sin privilegios en la caché de páginas.
Este repositorio está destinado únicamente a fines educativos y de seguridad defensiva. No utilices ninguna información o código de este repositorio en sistemas que no poseas o para los que no tengas autorización escrita explícita para realizar pruebas.
Mantente a salvo. Parchea pronto. Parchea a menudo. Feliz hacking 🛡️
| Dirty Cow (2016) | Dirty Pipe (2022) | Copy Fail (2026) | Dirty Frag (2026) |
|---|
| Requiere condición de carrera | Sí | Parcial | No | No |
| Específica de versiones | Sí | Sí | No | No |
| Fiabilidad | Inestable | Moderada | Determinista | Determinista |
| Cobertura de distribuciones | Limitada | Limitada | Todas desde 2017 | Todas desde 2017 |
| Omite la mitigación de Copy Fail | — | — | N/A | Sí |
| Distribución | Versión probada | Estado |
|---|
| Ubuntu 24.04.4 | 6.17.0-23-generic | Afectada — parche en despliegue |
| RHEL 10.1 | 6.12.0-124.49.1.el10_1.x86_64 | Afectada — parche en despliegue |
| AlmaLinux 10 | 6.12.0-124.52.3.el10_1.x86_64 | Afectada — parche disponible |
| CentOS Stream 10 | 6.12.0-224.el10.x86_64 | Afectada — parche en despliegue |
| Fedora 44 | 6.19.14-300.fc44.x86_64 | Afectada — parche disponible |
| openSUSE Tumbleweed | 7.0.2-1-default | Afectada — en curso |
| Debian | — | Afectada — en curso |
| Componente | Impacto |
|---|
| SSH | ✅ No afectado |
| dm-crypt / LUKS | ✅ No afectado |
| kTLS / TLS en el kernel | ✅ No afectado |
| OpenSSL / GnuTLS / NSS (compilaciones predeterminadas) | ✅ No afectado |
| IPsec / XFRM (túneles ESP, VPN) | ⚠️ Se rompe — esp4 y esp6 no estarán disponibles |
| Clientes AFS / OpenAFS que usan RxRPC | ⚠️ Se rompe — rxrpc no estará disponible |
Aplicaciones que usan AF_ALG + AEAD directamente | ⚠️ Comprueba con lsof | grep AF_ALG |
| Recurso | Enlace |
|---|
| Corrección en mainline de CVE-2026-43284 | f4c50a4034e6 |
| Corrección en mainline de CVE-2026-43500 | aa54b1d27fe0 |
| NVD — CVE-2026-43284 | https://nvd.nist.gov/vuln/detail/CVE-2026-43284 |
| NVD — CVE-2026-43500 | https://nvd.nist.gov/vuln/detail/CVE-2026-43500 |
| Fecha | Evento |
|---|
| 2017-01-17 | Regresión de CVE-2026-43284 introducida (cac2661c53f3) |
| 2023-06-08 | Regresión de CVE-2026-43500 introducida (2dc334f1a63a) |
| 2026-05-05 | CVE-2026-43284 parcheado en mainline (f4c50a4034e6) |
| 2026-05-07 | Divulgación pública |
| 2026-05-10 | CVE-2026-43500 parcheado en mainline (aa54b1d27fe0) |
| 2026-05-10+ | Comienzan a distribuirse los parches de las distribuciones |