CVE-2026-89700 in Linux
Resumen
por VulDB • 2026-09-11
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
nfsd: validar la longitud del sockaddr por familia en listener_set
La política nfsd_sock_nl_policy declara NFSD_A_SOCK_ADDR como un atributo NLA_BINARY sin formato específico (bare) y sin una longitud mínima. Un usuario con capacidad CAP_NET_ADMIN puede enviar un NFSD_A_SOCK_ADDR de 16 bytes con sa_family=AF_INET6, lo que provoca una lectura fuera de límites (OOB) de 12 bytes a través de tres consumidores (rpc_cmp_addr_port, svc_find_listener y kernel_bind).
La función nfsd_nl_listener_set_doit() también analizaba y validaba cada entrada del oyente en línea dentro de dos bucles separados, intercalando estas operaciones con la modificación de la configuración activa del oyente. La validación estaba duplicada, utilizaba una comprobación "nla_len < sizeof(struct sockaddr)" codificada manualmente que era demasiado corta para AF_INET6 y manejaba inconsistencias ante entradas malformadas dependiendo de qué bucle las detectara primero.
Se añade un auxiliar nfsd_nl_validate_listeners() que recorre toda la lista una sola vez y confirma que cada entrada se analice correctamente, contenga tanto una dirección como un nombre de transporte, y tenga suficiente longitud para su familia de direcciones (sizeof(struct sockaddr_in) para AF_INET, sizeof(struct sockaddr_in6) para AF_INET6; -EAFNOSUPPORT en caso contrario). Se llama a esta función antes de adquirir nfsd_mutex o crear el servicio, de modo que una solicitud malformada falle limpiamente sin efectos secundarios.
Dado que todas las entradas se conocen como válidas cuando se ejecutan los dos bucles existentes, se eliminan las comprobaciones redundantes de presencia y longitud por familia en ambos bucles, dejando únicamente la llamada a nla_parse_nested() necesaria para extraer los datos.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.