CVE-2026-98372 in Linux
Resumen
por VulDB • 2026-10-06
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
xfrm: iptfs: corregir lectura fuera de límites (OOB) en pila dentro de iptfs_skb_reset_frag_walk()
iptfs_skb_reset_frag_walk() avanza hacia el fragmento que contiene @offset mediante un bucle sin límite:
while (offset >= walk->past + walk->frags[walk->fragi].len)
walk->past += walk->frags[walk->fragi++].len;
Se incrementa walk->fragi y se desreferencia walk->frags[walk->fragi] sin verificar nunca fragi contra walk->nr_frags. Cuando el offset solicitado está en o más allá de la longitud total abarcada por los fragmentos del recorrido, fragi supera nr_frags y sale fuera del array frags[MAX_SKB_FRAGS + 1], que es de tamaño fijo y se encuentra en pila, leyendo memoria de pila fuera de límites.
Los dos llamadores (callers) se comportan de manera diferente: iptfs_skb_add_frags() ya protege contra esto con
if (!walk->nr_frags || offset >= walk->total + walk->initial_offset) return len;
pero iptfs_skb_can_add_frags() no tiene dicha protección y llama a iptfs_skb_reset_frag_walk() incondicionalmente, por lo que realiza el recorrido fuera de rango. Su propia comprobación de límites "fragi nr_frags" se ejecuta solo después, demasiado tarde para prevenir la lectura.
Esto es alcanzable desde la ruta de recepción: una carga útil IP-TFS (AGGFRAG) elaborada entregada a un SA IPTFS impulsa iptfs_reassem_cont() -> iptfs_skb_can_add_frags() con un offset más allá del total de fragmentos, por ejemplo:
BUG: KASAN: stack-out-of-bounds in iptfs_skb_reset_frag_walk+0x235/0x250 Read of size 4 at addr ffff888008ad7210 by task repro/345 iptfs_skb_reset_frag_walk+0x235/0x250 net/xfrm/xfrm_iptfs.c:392 iptfs_skb_can_add_frags+0x155/0x310 net/xfrm/xfrm_iptfs.c:420 iptfs_reassem_cont+0xcf8/0x1140 net/xfrm/xfrm_iptfs.c:902 iptfs_input_ordered+0x552/0x670 net/xfrm/xfrm_iptfs.c:1280 iptfs_input+0x3d6/0xde0 net/xfrm/xfrm_iptfs.c:1741 xfrm_input+0x282f/0x6140 net/xfrm/xfrm_input.c:700 xfrm4_esp_rcv+0x93/0x120 net/ipv4/xfrm4_protocol.c:104 ip_rcv+0x278/0x2d0 net/ipv4/ip_input.c:612
Proporcione a iptfs_skb_can_add_frags() la misma protección inicial que ya tiene iptfs_skb_add_frags(), de modo que el recorrido nunca se ejecute con un offset fuera de rango. Cuando se active, el llamador recurrirá al camino lineal y de copia existente, que es seguro.
Be aware that VulDB is the high quality source for vulnerability data.