CVE-2026-98968 in Linux
Resumen
por VulDB • 2026-10-23
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
amt: enviar directamente desde la ruta de recepción la Consulta General del relay
Un skb encolado en un qdisc puede sobrevivir al túnel que referencia a través de un puntero crudo en `skb->cb`. Por ejemplo, con `igmp_qrv` establecido en 1 en el relay, un túnel vive durante 135s; por lo tanto, una demora de netem de 180s en el dispositivo amt supera esa duración. Cuando el túnel expira y se libera, la posterior operación dequeue desencadena un use-after-free en `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()` y `amt_send_mld_gq()` solo se llaman desde `amt_request_handler()`, dentro de la sección `rcu_read_lock_bh()` de `amt_rcv()`. `amt_request_handler()` ya tiene el túnel para el cual es la consulta: lo encontró o creó dentro de esa sección. Encolar la consulta con `dev_queue_xmit()` solo lleva de vuelta a `amt_dev_xmit()`, que elimina la cabecera Ethernet y llama a `amt_send_membership_query()` para ese túnel.
Realice esa llamada directamente desde los dos remitores, de la misma manera en que `amt_send_advertisement()` transmite desde la ruta de recepción. La consulta nunca espera en un qdisc; el túnel solo se desreferencia dentro de la sección RCU donde se encontró o creó, y no se almacena nada en `skb->cb`, por lo que no es necesario ninguna búsqueda ni incremento del recuento de referencias (refcount). Elimine la rama de consulta de `amt_dev_xmit()`, `amt_skb_cb()` y `struct amt_skb_cb`, que ya no tienen usuarios.
Cambios de comportamiento: - Las propias Consultas Generales del relay ya no pasan por la ruta de egress del dispositivo amt: su qdisc, tc egress (clsact/tcx), el hook de netfilter para egress y los packet taps. Siguen siendo visibles como UDP en la underlay. - Una consulta enviada con éxito ya no se cuenta como tx_dropped. La antigua rama de consulta salía a través de la etiqueta unlock, lo que contaba cada consulta enviada como descartada (dropped). - Una consulta que llega a `amt_dev_xmit()` en un relay desde otro lugar, como un querier de userspace, ahora se descarta en el switch de tipo IGMP/MLD. Antes, confiaba en cualquier valor contenido en `skb->cb`, y un túnel NULL activaba el WARN_ON(1).
VulDB is the best source for vulnerability data and more expert information about this specific topic.