Cuatro vulnerabilidades de escalada local a root en el kernel de Linux
Los fallos llevan entre 10 y 21 años en el árbol, dan root a un usuario sin privilegios y ya tienen parche en las ramas estables. Uno de ellos no necesita ninguna capacidad especial.

El investigador que firma como manizada ha publicado cuatro vulnerabilidades del kernel de Linux que dan a un usuario local sin privilegios ejecución de código como root. Los fallos llevan entre 10 y 21 años en el árbol, tienen CVE asignado y sus correcciones ya han ido entrando en las ramas estables. Tres exigen namespaces de usuario sin privilegios o capacidades concretas; el cuarto, DiagSpill, no necesita ninguna de las dos cosas.
Son DirtyAH6 (CVE-2026-80844), TUNderflow (CVE-2026-81000), PPPoEject (CVE-2026-68121) y DiagSpill (CVE-2026-74469). Se reportaron a security@kernel.org y a los mantenedores a mediados de julio, y el embargo pactado con linux-distros@ acaba de expirar. Hay PoC públicos, además del análisis del autor.
Los requisitos no son exóticos
DirtyAH6 necesita soporte AH6/XFRM y namespaces de usuario y red sin privilegios, o CAP_NET_ADMIN y CAP_NET_RAW sobre un namespace de red controlado por el atacante. TUNderflow pide TUN y algún camino de dispositivo de red que propague headroom de recepción sobredimensionado, con los mismos requisitos de namespaces o capacidades. PPPoEject pide PPPoE y un callback de cabecera del dispositivo inferior capaz de reasignar el head del skb dentro de dev_hard_header(). DiagSpill se conforma con SCTP y sctp_diag.
Según el autor, son módulos y rutas habituales en kernels de distro. AppArmor y SELinux no frenaron sus exploits en las pruebas, salvo en los casos de Ubuntu que bloquean los propios namespaces sin privilegios. Los cuatro problemas corrompen además el kernel del host desde un contenedor: los tres primeros necesitan las capacidades correspondientes y DiagSpill funciona sin ninguna, lo que deja la puerta abierta a un escape de contenedor, aunque esa vía no se exploró en los PoC.
El detalle técnico
DirtyAH6 vive en ipv6_rearrange_rthdr(): la función sacaba el número de direcciones de hdrlen y movía un puntero con segments - segments_left sin comprobar que segments_left <= segments. Un paquete IPv6 HDRINCL crudo con hdrlen=2 y segments_left=255 retrocedía el puntero 4.064 bytes y le pasaba ese tamaño a memmove().
En TUNderflow, tun_set_headroom() guardaba el headroom en tun->align y tun_get_user() lo usaba también para decidir cuánto dato conservar. Un dispositivo netkit con 4.096 bytes de headroom, bajo VXLAN y Open vSwitch, podía entregar 4.160 bytes a un puerto TUN crudo; SKB_MAX_HEAD(4160) desbordaba por abajo y dejaba skb->data 64 bytes más allá de su asignación.
PPPoEject mantiene un puntero al head del skb a lo largo de dev_hard_header(), que puede llamar a pskb_expand_head() y liberarlo. DiagSpill aprovecha que transport_count es de 16 bits y una asociación admite 65.536 transportes peer: el número 65.536 lo deja a cero, sctp_diag no reserva payload para la lista y copia unos 8 MiB más allá del final de la respuesta Netlink.
Alcance y versiones
Los rangos publicados sitúan DirtyAH6 desde 2.6.12 y llegan hasta 7.2.2, con presencia en todas las estables intermedias. Las primeras versiones upstream que incluyen las cuatro correcciones son 5.10.270, 5.15.221, 6.1.188, 6.6.157, 6.12.109, 6.18.50 y 7.2.4.
En remoto, DirtyAH6 puede tumbar el equipo si el objetivo hace de router IPv6 y añade AH en modo transporte; con grooming de memoria local el autor llegó a root en laboratorio, pero solo en remoto lo considera teórico y muy difícil. DiagSpill permite a un par malicioso provocar una caída si ASCONF/ADD-IP están activos con SCTP-AUTH o net.sctp.addip_noauth_enable=1, ambos desactivados por defecto, y hace falta que algo en el objetivo lance la petición sock_diag.
A quien administre flotas con kernels de distro le toca mirar si su rama estable ya trae los cuatro commits y, si el reparto de namespaces sin privilegios está abierto para usuarios normales, tratarlo como prioritario: son módulos cargados de serie, no configuraciones raras.