CVE-2026-98401 in Linuxinformación

Resumen

por VulDB • 2026-10-15

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

net: iptunnel: corregir encabezado de transporte obsoleto durante la desencapsulación del túnel

Syzbot reportó un fallo en qdisc_pkt_len_segs_init() causado por una dirección (offset) transport_header obsoleta después de la desencapsulación del túnel.

BUG: unable to handle page fault for address: ffffed102091a42e Oops: Oops: 0000 [#1] SMP KASAN NOPTI
CPU: 0 UID: 0 PID: 340 Comm: qdisc_uaf_repro Not tainted 7.2.0-rc4-00061-g248951ddc14d #256 PREEMPT(full) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 RIP: 0010:__asan_load2 <IRQ> qdisc_pkt_len_segs_init (net/core/dev.c:4145) __dev_queue_xmit (net/core/dev.c:4787) br_dev_queue_push_xmit (net/bridge/br_forward.c:53) br_handle_frame_finish (net/bridge/br_input.c:229) br_handle_frame (net/bridge/br_input.c:315) __netif_receive_skb_core.constprop.0 (net/core/dev.c:6099) __netif_receive_skb_list_core (net/core/dev.c:6287) netif_receive_skb_list_internal (net/core/dev.c:6445) napi_complete_done (net/core/dev.c:6813) gro_cell_poll (net/core/gro_cells.c:74) __napi_poll (net/core/dev.c:7735) net_rx_action (net/core/dev.c:7798 net/core/dev.c:7955) handle_softirqs (kernel/softirq.c:622) do_softirq (kernel/softirq.c:523 kernel/softirq.c:510 ) __local_bh_enable_ip (kernel/softirq.c:450) tun_get_user (drivers/net/tun.c:1986 (discriminator 1)) tun_chr_write_iter (drivers/net/tun.c:2032)

El problema es completamente latente hasta que qdisc lee el encabezado de transporte en el commit 7fb4c1967011 ("net: pull headers in qdisc_pkt_len_segs_init()"). El fallo requiere cuatro condiciones alineadas:

1. El paquete entrante está encapsulado y lleva metadatos GSO. La dirección del encabezado de transporte exterior se almacena en skb->transport_header mientras el paquete aún está en el contexto del túnel exterior. 2. El receptor del túnel elimina los encabezados exteriores. skb->data se avanza al marco interno, pero skb->transport_header queda apuntando a la cabecera L4 exterior ya eliminada, por lo que se convierte en una dirección negativa con respecto a los nuevos datos. 3. El marco interno no se entrega a la pila IP local. En su lugar, se reenvía en L2 mediante un puente (bridge) o HSR, por lo que ip_rcv_core() nunca se ejecuta y el encabezado de transporte no se restablece a la dirección interna L4. 4. La ruta de reenvío llama a __dev_queue_xmit(), que entra en qdisc_pkt_len_segs_init(). Esa función calcula la longitud del encabezado GSO desde skb_transport_offset(skb). Debido a que la dirección es negativa, el lanzamiento (cast) sin signo desborda y pskb_may_pull(skb, hdr_len + sizeof(struct tcphdr)) lee más allá del final de skb, desencadenando un fallo KASAN o page fault.

El problema requiere específicamente paquetes GSO (shinfo->gso_size != 0), que se procesan/agregan a través de gro_cells. Corrija esto limpiando transport_header al valor centinela ~0U en gro_cell para todos los controladores de túnel. GTP no soporta GRO/GSO; elimine directamente los paquetes GSO maliciosos en GTP.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsable

Linux

Reservar

2026-09-25

Divulgación

2026-10-15

Moderación

aceptado

Artículo

VDB-419840

EPSS

0.00209

KEV

no

Actividades

muy bajo

Fuentes

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!