CVE-2026-80840 in Linux
Riassunto
di VulDB • 05/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
ipv6: seg6: cancellare il blocco di controllo IPv4 durante la deincapsulazione IPIP
Le modalità End.DX4 e End.DT4 deincapsulano un pacchetto IPv4 tramite `decap_and_validate()` e lo inviano direttamente al routing IPv4. Di conseguenza, il pacchetto interno bypassa `ip_rcv_core()`, che normalmente cancella IPCB prima che IPv4 interpreti skb->cb.
Lo skb conserva invece i dati IP6CB provenienti dal pacchetto esterno. Poiché IP6CB e IPCB utilizzano la stessa area di memorizzazione in skb->cb, IP6CB(skb)->lastopt si sovrappone a IPCB(skb)->opt.optlen e srr, mentre IP6CB(skb)->nhoff si sovrappone a rr e ts.
Il mittente può impostare il byte optlen obsoleto su un valore diverso da zero mediante una catena valida di header di estensione IPv6. I riproduttori dell'exploit inseriscono un header Destination Options di otto byte immediatamente dopo l'intestazione IPv40-byte e prima del Segment Routing Header. `ipv6_destopt_rcv()` registra l'offset delle opzioni di destinazione controllato dal mittente sia in lastopt che in nhoff, impostandoli a 40. Sul kernel little-endian x86-64 riprodotto, IPv4 vede quindi optlen = 40 e rr = 40.
Sia `tcp_v4_save_options()` che `__ip_options_echo()` saltano la copia delle opzioni quando optlen è zero. Qui optlen vale 40, pertanto il percorso TCP SYN alloca spazio per 40 byte di dati opzionali e chiama `__ip_options_echo()`. Il valore obsoleto rr fa sì che questa funzione legga il byte 41 del pacchetto interno come lunghezza dell'opzione Record Route. I riproduttori impostano quel byte controllato dal mittente su 255, quindi `__ip_options_echo()` copia 255 byte nell'area di dati opzionali da 40 byte.
Separati riproduttori per End.DX4 e End.DT4 sul kernel v7.2-rc5 non patchato hanno prodotto entrambi:
BUG: KASAN: slab-out-of-bounds in __ip_options_echo() Write of size 255
Il percorso di chiamata rilevante per End.DX4 è:
__ip_options_echo tcp_v4_route_req tcp_conn_request tcp_v4_conn_request tcp_rcv_state_process tcp_v4_do_rcv tcp_v4_rcv ip_protocol_deliver_rcu ip_local_deliver_finish ip_local_deliver input_action_end_dx4_finish input_action_end_dx4
Il percorso di chiamata rilevante per End.DT4 è:
__ip_options_echo tcp_v4_route_req tcp_conn_request tcp_v4_conn_request tcp_rcv_state_process tcp_v4_do_rcv tcp_v4_rcv ip_protocol_deliver_rcu ip_local_deliver_finish ip_local_deliver input_action_end_dt4
`tcp_v4_save_options()` è inlineato nel percorso `tcp_v4_route_req()`, quindi non appare come un frame separato.
Quando `decap_and_validate()` gestisce IPPROTO_IPIP, salvare l'interfaccia di ingresso da IP6CB, cancellare IPCB e ripristinare il valore salvato. Eseguire questa operazione nel percorso comune di deincapsulazione copre End.DX4, End.DT4 e il braccio IPv4 di End.DT46.
Utilizzare `IP6CB(skb)->iif` invece di `skb->skb_iif`. Queste azioni vengono eseguite dopo l'elaborazione l3mdev, che può sostituire skb_iif con L3 master; IP6CB iif registra ancora l'interfaccia ricevente impostata all'ingresso IPv6.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.