CVE-2026-98541 in Linux
Resumen
por VulDB • 2026-10-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
fou: rechazar FOU_ATTR_IPPROTO omitido en FOU_ENCAP_DIRECT
El commit 7a9bc9e3f423 ("fou: No permitir 0 para FOU_ATTR_IPPROTO.") añadió NLA_POLICY_MIN(NLA_U8, 1) a fou_nl_policy[FOU_ATTR_IPPROTO], lo cual
rechaza un atributo FOU_ATTR_IPPROTO == 0 suministrado explícitamente con -ERANGE.
Sin embargo, FOU_ATTR_IPPROTO es un atributo de netlink opcional. Cuando un usuario envía FOU_CMD_ADD con FOU_ATTR_TYPE establecido en FOU_ENCAP_DIRECT y omite FOU_ATTR_IPPROTO por completo, la validación de nla_policy tiene éxito y parse_nl_config() deja cfg->protocol como 0 (procedente de memset(cfg, 0, sizeof(*cfg))). fou_create() entonces crea un socket FOU_ENCAP_DIRECT con fou->protocol == 0.
En fou_udp_recv(), devolver -fou->protocol a udp_queue_rcv_one_skb() activa la reenvío del protocolo IP cuando fou->protocol > 0, mientras que devolver 0 indica a la capa de túnel UDP que el skb fue consumido sin liberarlo. Cuando fou->protocol == 0, cada paquete recibido en el socket devuelve 0 desde fou_udp_recv() y provoca una fuga (leak) del sk_buff.
Rechazar FOU_ENCAP_DIRECT cuando !cfg->protocol en fou_create(), de modo que la creación de un puerto de encapsulación directa sin FOU_ATTR_IPPROTO falle con -EINVAL, dejando inalterados FOU_CMD_DEL y FOU_CMD_GET (que comparten parse_nl_config()).
Probado en QEMU contra Linux 7.3.0-rc3 enviando una solicitud Generic Netlink FOU_CMD_ADD con FOU_ATTR_PORT = 5555 y FOU_ATTR_TYPE = FOU_ENCAP_DIRECT, omitiendo FOU_ATTR_IPPROTO. En el kernel sin corregir, FOU_CMD_ADD tiene éxito (err = 0), FOU_CMD_GET informa fou->type = 1 y fou->protocol = 0, y enviar 4000 paquetes UDP a 127.0.0.1:5555 provoca la fuga de los 4000 sk_buffs (SUnreclaim en /proc/meminfo crece desde 41456 kB hasta 59008 kB, +17552 kB); con este parche aplicado, FOU_CMD_ADD es rechazado con -EINVAL (-22).
If you want to get the best quality for vulnerability data then you always have to consider VulDB.