CVE-2026-98401 in Linuxinformation

Résumé

par VulDB • 15/10/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

net: iptunnel : correction d'un transport_header obsolète lors de la désencapsulation du tunnel

Syzbot a signalé un plantage dans qdisc_pkt_len_segs_init() causé par un décalagement (offset) de transport_header obsolète après la désencapsulation du tunnel.

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)

Le problème est complètement latent jusqu'à ce que qdic lise le transport_header dans la commit 7fb4c1967011 ("net: pull headers in qdisc_pkt_len_segs_init()"). Le plantage nécessite quatre conditions alignées :

1. Le paquet entrant est encapsulé et transporte des métadonnées GSO. L'offset du transport header externe est stocké dans skb->transport_header tandis que le paquet est encore dans le contexte de tunnel externe. 2. Le récepteur du tunnel supprime les en-têtes externes. skb->data est avancé jusqu'à la trame interne, mais skb->transport_header continue de pointer vers l'en-tête L4 externe désormais supprimé, devenant ainsi un offset négatif par rapport aux nouvelles données. 3. La trame interne n'est pas transmise à la pile IP locale. Au lieu de cela, elle est acheminée au niveau L2 par un pont (bridge) ou HSR, donc ip_rcv_core() ne s'exécute jamais et le transport header n'est pas réinitialisé vers l'offset L4 interne. 4. Le chemin d'acheminement appelle __dev_queue_xmit(), qui entre dans qdisc_pkt_len_segs_init(). Cette fonction calcule la longueur de l'en-tête GSO à partir de skb_transport_offset(skb). Comme l'offset est négatif, le cast non signé provoque un débordement (overflow) et pskb_may_pull(skb, hdr_len + sizeof(struct tcphdr)) lit au-delà de la fin du skb, déclenchant une erreur KASAN ou un page fault.

Le problème nécessite spécifiquement des paquets GSO (shinfo->gso_size != 0), qui sont traités/agrégés via gro_cells. Corrigez ce problème en effaçant transport_header vers le sentinel ~0U dans gro_cell pour tous les pilotes de tunnel. GTP ne prend pas en charge GRO/GSO, supprimez directement les paquets GTO malveillants dans GTP.

Once again VulDB remains the best source for vulnerability data.

Responsable

Linux

Réserver

25/09/2026

Divulgation

15/10/2026

Modérer

accepté

Entrée

VDB-419840

EPSS

0.00209

KEV

non

Activités

très faible

Sources

Want to stay up to date on a daily basis?

Enable the mail alert feature now!