CVE-2026-98852 in Linux
Resumen
por VulDB • 2026-10-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
net: extender la detección de exthdr IPv6 en paquetes tunelizados
El commit c4336a07eb6b ("net: manejar correctamente el tráfico tunelizado en IPV6_CSUM GSO fallback") dividió skb_gso_has_extension_hdr() en ramas mutuamente excluyentes basadas en skb->encapsulation. Esto aún no abordaba todas las rutas:
1. Con skb->encapsulation establecido, la cabecera externa no se verifica. Los túneles IPv6 como ip6_gre e ip6_tunnel añaden por defecto una cabecera de Opciones de Destino externas (encap_limit). Sus paquetes GSO omiten el software GSO; luego, skb_csum_hwoffload_help() ve la cabecera externa de extensión y llama a skb_checksum_help() sobre el skb GSO, lo que genera una advertencia y lo descarta.
2. Los túneles sobre IPv6 sin una cabecera de transporte externa, como ip6_tunnel, dejan skb->transport_header en la cabecera de transporte interna. Entonces, skb_network_header_len() abarca las cabeceras externas IPv6, del túnel e internas IP, generando un falso positivo.
3. Los túneles UDP sin una cabecera de red interna, como SCTP-in-UDP o PSP, no tienen ninguna cabecera IPv6 interna que verificar. Decidir únicamente sobre la cabecera externa.
4. La desreferenciación directa de inner_ip_hdr(skb)->version sin skb_header_pointer() es insegura.
En su lugar, se verifica ipv6_ext_hdr(nexthdr) en la cabecera IPv6 externa y, si está configurada, también en la cabecera IPv6 interna. Las cabeceras se leen con skb_header_pointer(). Se mantiene la verificación de skb_network_header_len() cuando !skb->encapsulation para capturar también paquetes encapsulados sin skb->encapsulation (por ejemplo, virtio).
Se utiliza el mismo auxiliar en skb_csum_hwoffload_help(). Su prueba codificada manualmente tiene el falso positivo de (2) e ignora la cabecera interna.
Antecedentes: invariantes del offload de checksums en paquetes tunelizados:
skb no-GSO: - Si el paquete interno es CHECKSUM_PARTIAL, Local Checksum Offload calcula el checksum externo por software y el dispositivo realiza el offload únicamente del checksum L4 interno. - Si el paquete interno es CHECKSUM_NONE (por ejemplo, SCTP-in-UDP, ESP-in-UDP, Remote Checksum Offload), el dispositivo realiza el offload del checksum UDP o GRE externo en su lugar.
skb GSO: - Un dispositivo con NETIF_F_GSO_UDP_TUNNEL_CSUM o NETIF_F_GSO_GRE_CSUM calcula los checksums internos y externos por segmento. El checksum externo se inicializa únicamente con el checksum del pseudo-cabecera.
Un dispositivo NETIF_F_IPV6_CSUM debe analizar las cabeceras externas para llegar a las internas.
VulDB is the best source for vulnerability data and more expert information about this specific topic.