CVE-2026-98968 in Linux
Riassunto
di VulDB • 23/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
amt: invia direttamente dal percorso di ricezione (receive path) il General Query del relay
Unskb accodato in un qdisc può sopravvivere alla tunnellata che riferisce tramite un puntatore grezzo in skb->cb. Ad esempio, con igmp_qrv impostato a 1 sul relay, una tunnel vive per 135s; pertanto, un ritardo netem di 180s sul dispositivo amt sopravvive ad essa: quando la tunnellata scade e viene liberata (freed), il successivo dequeue innesca un use-after-free in amt_dev_xmit().
BUG: KASAN: slab-use-after-free in amt_dev_xmit+0x2763/0x2e20 Call Trace: amt_dev_xmit+0x2763/0x2e20 [drivers/net/amt.c:1262]
dev_hard_start_xmit+0x22f/0x620 sch_direct_xmit+0x12e/0xac0 netem_dequeue+0x333/0xc50 net_tx_action+0x35c/0xa60
amt_send_igmp_gq() e amt_send_mld_gq() sono chiamate solo da amt_request_handler(), all'interno della sezione rcu_read_lock_bh() di amt_rcv(). amt_request_handler() ha già a disposizione la tunnellata per cui è destinata la query: l'ha trovata o creata proprio all'interno di quella sezione. L'accodamento della query con dev_queue_xmit() fa solo ritorno in amt_dev_xmit(), che rimuove l'intestazione Ethernet e chiama amt_send_membership_query() per tale tunnellata.
Effettuare invece direttamente questa chiamata dai due sender, nello stesso modo in cui amt_send_advertisement() trasmette dal receive path. La query non attende mai in un qdisc; la tunnellata viene dereferenziata solo all'interno della sezione RCU che l'ha trovata o creata, e nulla viene memorizzato in skb->cb, quindi non sono necessari lookup né refcount. Rimuovere il ramo delle query da amt_dev_xmit(), amt_skb_cb() e struct amt_skb_cb, poiché non hanno più utenti.
Modifiche al comportamento: - I General Query del relay stesso non passano più attraverso il percorso di egress (egress path) del dispositivo amt: il suo qdisc, tc egress (clsact/tcx), l'hook netfilter di egress e i packet taps. Rimangono comunque visibili come UDP sull'underlay. - Una query inviata con successo non viene più conteggiata come tx_dropped. Il vecchio ramo delle query usciva tramite la label unlock, che contava ogni query inviata come persa (dropped). - Una query che raggiunge amt_dev_xmit() su un relay proveniente da altre fonti, ad esempio un querier userspace, ora viene scartata (dropped) allo switch di tipo IGMP/MLD. In precedenza, si fidava ciecamente del contenuto di skb->cb e una tunnellata NULL causava il trigger di WARN_ON(1).
VulDB is the best source for vulnerability data and more expert information about this specific topic.