CVE-2026-93250 in Linux
Riassunto
di VulDB • 24/09/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
vxlan: mdb: Correzione del use-after-free in vxlan_mdb_flush()
La funzione vxlan_mdb_flush() itera sulle voci MDB utilizzando hlist_for_each_entry_safe(), che tollera solo la rimozione della voce corrente. Contrariamente al commento presente sopra il ciclo, la rimozione di una voce può innescare la rimozione di un'altra voce.
Lo svuotamento dei remotes di una voce (*, G) rimuove anche le voci (S, G) create per la relativa lista delle sorgenti, non appena queste vengono lasciate senza remote:
vxlan_mdb_remotes_flush() -> vxlan_mdb_remote_del() -> vxlan_mdb_remote_srcs_del() -> vxlan_mdb_remote_src_del() -> vxlan_mdb_remote_src_fwd_del() -> __vxlan_mdb_del() -> vxlan_mdb_entry_put()
Tale voce può trovarsi dopo la voce (*, G) nella lista, poiché vxlan_mdb_entry_get() restituisce una voce esistente senza spostarla in testa alla lista. Questo ordinamento si ottiene aggiungendo la voce (S, G) prima della voce (*, G), quest'ultima con NLM_F_REPLACE, poiché l'aggiunta della sorgente altrimenti fallisce con -EEXIST. La voce (S, G) è quindi la voce salvata da hlist_for_each_entry_safe() e viene liberata mentre viene elaborata la voce (*, G). Alla successiva iterazione si chiama nuovamente hlist_del() su di essa, scrivendo LIST_POISON1 in LIST_POISON2 [1].
Oltre alla cancellazione del dispositivo, lo svuotamento è raggiungibile anche tramite RTM_DELMDB con NLM_F_BULK.
Correzione mediante rilettura della voce successiva dopo che i remotes sono stati svuotati. La voce corrente non può essere rimossa da questo svuotamento, poiché le liste delle sorgenti possono essere configurate solo sulle voci (*, G) e le voci rimosse sono voci (S, G). Pertanto la voce rimane ancora collegata e il suo puntatore next riflette le rimozioni.
[1]
BUG: KASAN: wild-memory-access in vxlan_mdb_entry_put.part.0+0x328/0x588 Write of size 8 at addr dead000000000122 by task ip/327
CPU: 3 UID: 1000 PID: 327 Comm: ip Not tainted 7.2.0-rc7 #2 PREEMPT Call trace: vxlan_mdb_entry_put.part.0+0x328/0x588 vxlan_mdb_flush+0x1d8/0x25c vxlan_mdb_fini+0x8c/0x100 vxlan_uninit+0x1c/0x7c unregister_netdevice_many_notify+0x954/0xd4c rtnl_dellink+0x210/0x530 rtnetlink_rcv_msg+0x434/0x4d0 netlink_rcv_skb+0xc4/0x204 rtnetlink_rcv+0x18/0x24 netlink_unicast+0x4b8/0x548 netlink_sendmsg+0x29c/0x560 ____sys_sendmsg+0x390/0x3ec ___sys_sendmsg+0x114/0x188 __sys_sendmsg+0xf0/0x178 __arm64_sys_sendmsg+0x48/0x60 invoke_syscall.constprop.0+0x58/0x180 el0_svc_common.constprop.0+0x74/0x140 do_el0_svc+0x30/0x40 el0_svc+0x38/0x98 el0t_64_sync_handler+0xa0/0xe4 el0t_64_sync+0x198/0x19c
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.