Hace poco se dio a conocer información sobre un fallo que fue detectado en la pila IPv6 del kernel de Linux catalogada bajo CVE-2023-6200 y evaluada con una puntuación de 7.5 en la escala CVSS, esta vulnerabilidad apareció a partir de la rama 6.6 del Kernel de Linux y plantea un problema bastante grave, ya que permite a los atacantes la ejecución remota de código.
Y es que se menciona que este fallo detectado en la pila de red del kernel de Linux que, bajo ciertas condiciones, podría permitir a un atacante en la red local ejecutar código malicioso. Esta vulnerabilidad se activa mediante el envío de un paquete ICMPv6 especialmente diseñado con un mensaje RA (Router Advertisement), el cual tiene como objetivo anunciar información sobre el enrutador.
Se encontró una condición de carrera en el kernel de Linux. Bajo ciertas condiciones, un atacante no autenticado de una red adyacente podría enviar un paquete de publicidad de enrutador ICMPv6, provocando la ejecución de código arbitrario. Para desencadenar este problema, el atacante debe estar en la red local, IPV6, y el parámetro net.ipv6.conf debe estar habilitado…
Se menciona que el origen del problema reside en una condición de carrera que ocurre cuando el recolector de basura procesa registros fib6_info obsoletos, lo que puede dar lugar al acceso a un área de memoria liberada (conocido como uso después de la liberación). Si bien el protocolo de Internet es fundamental para la transferencia de datos entre nodos, hay otras tareas críticas que deben completarse para garantizar su funcionamiento confiable. Entre estas tareas se encuentran los informes de errores, el descubrimiento de enrutadores, los diagnósticos y otras funciones necesarias para la operación efectiva de IP en entornos IPv6. El Protocolo de mensajes de control de Internet (ICMPv6) desempeña un papel crucial al gestionar estas funciones en IPv6.
ICMPv6 proporciona un marco para el descubrimiento de oyentes de multidifusión (MLD) y el descubrimiento de Nodos vecinos (Neighbor Discovery). Estas funciones son responsables de comunicar información de membresía de grupos de multidifusión (equivalente al protocolo IGMP en IPv4) y resolver direcciones (una tarea realizada por ARP en IPv4).
Al recibir un paquete ICMPv6 con un mensaje de anuncio de enrutador (RA), la pila de red invoca la función ndisc_router_discovery(). Si el mensaje RA contiene información sobre la vida útil de la ruta, esta función llama a fib6_set_expires() y llena la estructura gc_link. Posteriormente, para limpiar las entradas obsoletas, se utiliza la función fib6_clean_expires(), que separa la entrada en gc_link y libera la memoria utilizada por la estructura fib6_info. Sin embargo, existe un momento en el que la memoria de la estructura fib6_info ya ha sido liberada, pero el enlace a la misma sigue estando presente en la estructura gc_link.
Es importante destacar que esta vulnerabilidad solo puede ser explotada desde la red local y afecta a sistemas con soporte para IPv6 habilitado y el parámetro sysctl «net.ipv6.conf.<network_interface_name>.accept_ra» activo. Aunque en sistemas como RHEL y Ubuntu, este parámetro está desactivado de forma predeterminada para interfaces de red externas, se encuentra habilitado para la interfaz loopback, lo que potencialmente permite un ataque desde el mismo sistema.
Finalmente cabe mencionar que la vulnerabilidad se solucionó en las versiones del Kernel de Linux 6.6.9 y 6.7 y entre las distribuciones afectadas que incluyen los paquetes con el kernel 6.6, podemos destacar Arch Linux, Gentoo, Fedora, Slackware, OpenMandriva y Manjaro.
Además de ello, se menciona que en otras distribuciones, es posible que el cambio con un error sea un backport con paquetes con ramas de kernel más antiguas. Por ejemplo, en Debian el paquete con kernel 6.5.13 es vulnerable, mientras que el cambio problemático apareció en la rama 6.6). Como solución de seguridad, puede desactivar IPv6 o establecer los parámetros «net.ipv6.conf.*.accept_ra» en 0.
Para los interesados en poder consultar el estado de la reparación de la vulnerabilidad en las distribuciones se puede evaluar en estas páginas: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo y Slackware. Por último y no menos importante, como siempre, solemos hacer la recomendación a usuarios y administradores de sistemas, tomar las precauciones necesarias y realizar las actualizaciones correspondientes.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.