
Repositorio de investigación para CVE-2026-81000 (TUNderflow), un desbordamiento negativo de enteros en el headroom de recepción de TUN/TAP del kernel de Linux que permite la escalada local de privilegios, con PoC, análisis de causa raíz y configuración de laboratorio.
TUNderflow
Una vulnerabilidad de corrupción de memoria en el kernel de Linux en el subsistema de red TUN/TAP, causada por límites insuficientes en el headroom de recepción y un desbordamiento negativo de entero en la ruta de asignación de paquetes.
Este repositorio está destinado a la investigación de seguridad autorizada, el análisis de vulnerabilidades, entornos CTF, depuración del kernel y pruebas defensivas.
No utilice el código de prueba de concepto contra sistemas sin autorización explícita.
| Campo | Detalles |
|---|---|
| CVE | CVE-2026-81000 |
| Nombre en clave | TUNderflow |
| Componente | Kernel de Linux |
| Subsistema | TUN/TAP |
| Código afectado | drivers/net/tun.c |
| Función principal | tun_get_user() |
| Clase de error | Desbordamiento negativo de entero / acceso a memoria fuera de límites |
| Impacto | Corrupción de memoria del kernel |
| Impacto potencial | Escalada de privilegios local |
| CVSS v3.1 | 7.8 — Alta |
| Vector de ataque | Local |
| Privilegios requeridos | Bajos |
| Interacción del usuario | Ninguna |
| Estado | Parcheado |
El aviso de la CVE describe el problema como un desbordamiento negativo de
entero que puede provocar que skb->data quede posicionado fuera de la cabeza
del skb asignada.
La vulnerabilidad existe en la ruta de recepción TUN/TAP del kernel de Linux.
El código afectado utiliza el headroom de recepción configurado del dispositivo TUN tanto como headroom del paquete como al calcular cuántos datos del paquete deben permanecer lineales.
Un valor de headroom sobredimensionado puede, por lo tanto, crear un cálculo inválido en:
SKB_MAX_HEAD(align)
Cuando el valor proporcionado supera la cabeza skb utilizable de una página, el cálculo puede sufrir un desbordamiento negativo.
Conceptualmente:
Oversized receive headroom
│
▼
SKB_MAX_HEAD()
│
▼
Integer underflow
│
▼
Negative value
│
▼
size_t wrap
│
▼
Invalid skb data placement
│
▼
Kernel memory corruption
La implementación vulnerable se encuentra en:
drivers/net/tun.c
siendo tun_get_user() central en la ruta vulnerable.
El problema subyacente es un headroom de recepción de TUN insuficientemente acotado.
El kernel puede recibir una solicitud de headroom de tamaño excesivo a través de rutas de dispositivos de red que propagan el valor a TUN/TAP.
La vulnerabilidad resulta especialmente interesante cuando una configuración de red virtual compleja provoca que un valor de headroom grande llegue a un dispositivo TUN.
La divulgación pública describe un escenario que involucra:
Netkit
│
▼
VXLAN
│
▼
Open vSwitch
│
▼
TUN
Una configuración de ejemplo puede propagar aproximadamente 4160 bytes de margen a un puerto TUN sin procesar, provocando que la aritmética vulnerable sufra un desbordamiento negativo.
La corrupción ocurre en la lógica de gestión de memoria de red del kernel.
Las posibles consecuencias incluyen:
La divulgación pública reporta la vulnerabilidad como parte de un grupo de vulnerabilidades de root local en Linux y afirma que el PoC publicado puede lograr la ejecución de usuario local sin privilegios a root en objetivos compatibles.
La explotabilidad depende del entorno y requiere la configuración relevante del dispositivo TUN/red y la funcionalidad de soporte.
ATTACKER
│
▼
Oversized network headroom
│
▼
Virtual network device
│
▼
Open vSwitch
│
▼
TUN/TAP
│
▼
tun_get_user()
│
▼
SKB_MAX_HEAD(align)
│
▼
Integer underflow
│
▼
size_t wraparound
│
▼
Invalid skb->data offset
│
▼
Kernel memory corruption
Los componentes importantes son:
drivers/net/tun.c
│
├── tun_set_headroom()
│
├── tun_get_user()
│
└── tun_alloc_skb()
La relación vulnerable se puede simplificar como:
tun->align
│
├── skb headroom
│
└── linear-data calculation
Usar el mismo valor sobredimensionado en ambos cálculos crea una relación insegura entre el headroom solicitado y el presupuesto real de head de skb.
La propiedad de seguridad crítica puede representarse conceptualmente como:
usable_head < requested_headroom
lo que puede dar como resultado:
SKB_MAX_HEAD(align) < 0
seguido de una conversión sin signo:
negative value
↓
size_t
↓
very large unsigned value
Esto puede influir en última instancia en la asignación de skb y la ubicación de los datos.
La descripción oficial señala específicamente que el valor resultante se desborda (wrap) cuando
se asigna a la variable size_t linear.
La corrección upstream es:
447c9303942c439a117d9b76ce6d6e2116c38ee7
Commit:
net: tun: bound receive headroom
La corrección limita el headroom almacenado por TUN frente al presupuesto disponible de head de skb de una página y el mayor desplazamiento de cabecera skb válido de 16 bits. También garantiza que haya suficientes datos lineales disponibles para el procesamiento raw de TUN y TAP.