
Repositorio de investigación para CVE-2026-80844 (DirtyAH6), una escalada de privilegios local en el kernel de Linux IPv6 AH6/XFRM, con PoC, análisis de causa raíz y parche.
DirtyAH6
CVE-2026-80844 es una vulnerabilidad del kernel de Linux que afecta al subsistema IPv6 Authentication Header (AH6) / XFRM.
La vulnerabilidad se debe a una validación insuficiente del campo
segments_left de la cabecera de enrutamiento IPv6, lo que puede provocar
una operación de memoria fuera de límites y la corrupción de la memoria del
kernel.
Este repositorio está destinado únicamente a la investigación de seguridad autorizada, el análisis de vulnerabilidades, CTFs y pruebas defensivas.
No utilice esta investigación contra sistemas que no sean de su propiedad o para los que no tenga permiso explícito de prueba.
| Campo | Detalles |
|---|---|
| CVE | CVE-2026-80844 |
| Nombre en clave | DirtyAH6 |
| Componente | Kernel de Linux |
| Subsistema | IPv6 / XFRM / AH6 |
| Tipo de vulnerabilidad | Escalada de privilegios local |
| Vector de ataque | Local |
| Complejidad del ataque | Baja |
| Privilegios requeridos | Bajos |
| Interacción del usuario | Ninguna |
| CVSS v3.1 | 7.8 — Alta |
| Código afectado | net/ipv6/ah6.c |
| Estado | Parcheado |
La vulnerabilidad existe en la ruta de procesamiento de IPv6 AH6.
El código afectado realiza la manipulación de la cabecera de enrutamiento mediante:
net/ipv6/ah6.c
En concreto, la lógica vulnerable implica:
ipv6_rearrange_rthdr()
La función no logró validar adecuadamente la relación entre:
hdrlen
y:
segments_left
Un atacante capaz de suministrar un paquete IPv6 especialmente manipulado puede, por lo tanto, provocar que el kernel opere sobre memoria fuera de los límites esperados de la cabecera de enrutamiento.
Esto puede dar lugar a:
Malformed IPv6 packet
│
▼
AH6 / XFRM processing
│
▼
Invalid routing-header state
│
▼
Out-of-bounds memory operation
│
▼
Kernel memory corruption
│
▼
Potential privilege escalation
El problema fundamental es la validación insuficiente del valor segments_left del Encabezado de Enrutamiento IPv6.
Conceptualmente, la condición vulnerable puede representarse como:
segments_left > available routing-header addresses
El kernel debe garantizar que el número de segmentos solicitado por la cabecera de enrutamiento sea coherente con la longitud real de la cabecera antes de manipular los datos de dirección asociados.
Sin esa validación, las operaciones de memoria posteriores pueden operar más allá de los límites válidos del búfer.
Una explotación exitosa puede permitir a un atacante con las capacidades/entorno locales requeridos corromper la memoria del kernel.
Las posibles consecuencias incluyen:
La explotabilidad exacta depende de la configuración del kernel, los espacios de nombres/capacidades disponibles y otras condiciones del entorno.
net/ipv6/ah6.c
Procesamiento relevante:
AH6
└── IPv6 Routing Header
└── ipv6_rearrange_rthdr()
El escenario problemático implica metadatos de encabezado de enrutamiento inconsistentes.
Por ejemplo, conceptualmente:
hdrlen → describes a limited number of addresses
segments_left → claims more addresses than are available
Esta discrepancia debe rechazarse antes de que el kernel realice la reordenación de direcciones.
La corrección upstream introduce una validación para el valor
segments_left del Routing Header antes de que el kernel realice la operación
vulnerable.
El commit upstream asociado es:
7bad4bda74dc4713f398d3b7624ff05478e3a568
xfrm: ah6: validate routing header segments_left
La corrección de seguridad se puede resumir como:
Before:
Trust segments_left
↓
Rearrange addresses
↓
Potential OOB access
After:
Validate segments_left
↓
Reject malformed header
↓
Safe AH6 processing
Las versiones afectadas dependen del historial de backports del upstream y del proveedor.
Los usuarios deben verificar el aviso de seguridad de su distribución en lugar de basarse únicamente en el número de versión del upstream.
Ejemplos de versiones estables del upstream parcheadas incluyen:
| Rama del kernel | Versión parcheada |
|---|---|
| 5.10 | 5.10.270 |
| 5.15 | 5.15.221 |
| 6.1 | 6.1.188 |
| 6.6 | 6.6.157 |
| 6.12 | 6.12.109 |
| 6.18 | 6.18.50 |
| 7.2 | 7.2.4 |
Verifique el kernel en ejecución:
uname -a
o:
uname -r
Comprobar información detallada del kernel:
cat /proc/version
Para sistemas basados en Debian/Kali:
apt-cache policy linux-image-amd64
Para sistemas basados en RPM:
rpm -q kernel
Los kernels de distribución con frecuencia aplican retroactivamente correcciones de seguridad sin cambiar la versión upstream de forma evidente. Comprueba siempre el aviso/registro de cambios del proveedor.
La mitigación principal es actualizar a un kernel que contenga la corrección de seguridad.
Debian/Kali:
sudo apt update
sudo apt full-upgrade
Luego reinicia:
sudo reboot
Verificar:
uname -r
Para sistemas en producción, consulte el aviso de seguridad oficial de la distribución de Linux antes de aplicar actualizaciones del kernel.
Entorno aislado recomendado:
Host
│
├── Kali Linux
│
└── Vulnerable Linux VM
│
├── Debug kernel
├── IPv6 enabled
├── AH6/XFRM support
└── Kernel symbols
Herramientas de depuración útiles:
gdb
gef
pwndbg
crash
dmesg
pahole
objdump
readelf
Depuración del kernel:
sudo dmesg -w
Inspeccionar los símbolos del kernel:
cat /proc/kallsyms