Múltiples vulnerabilidades locales de escalada de privilegios corregidas en el kernel de Linux
Recientemente se han encontrado múltiples vulnerabilidades "use-after-free" en el kernel de Linux que pueden ser explotadas para conseguir una elevación local de privilegios. Esto significa que un atacante o un usuario con acceso restringido (es decir, un usuario local) puede utilizar estas vulnerabilidades para obtener privilegios o permisos elevados que no debería tener.
Con acceso elevado, el atacante puede ejecutar comandos con mayores privilegios, comprometiendo potencialmente todo el sistema. La National Vulnerability Database ha asignado a estas vulnerabilidades sus CVE específicos y las ha marcado como de gravedad alta.
En esta entrada de blog, hablaremos de algunas de estas nuevas vulnerabilidades de alta gravedad descubiertas en el kernel de Linux.
Vulnerabilidades locales de escalada de privilegios de alta gravedad
CVE-2023-4921
Se ha identificado una vulnerabilidad de uso después de una situación libre dentro del componente 'net/sched: sch_qfq' del kernel de Linux. Esta vulnerabilidad surge cuando el 'plug qdisc' se emplea como una clase del 'qfq qdisc'. En este escenario, el acto de enviar paquetes de red puede desencadenar una situación de uso después de libre dentro de la función 'qfq_dequeue()', debido principalmente a una implementación incorrecta de '.peek handler' en 'sch_plug' y a la ausencia de comprobación de errores en 'agg_dequeue()'.
CVE-2023-4207
También se trata de una vulnerabilidad de uso después de la liberación presente en el componente 'net/sched: cls_fw' del kernel de Linux. La vulnerabilidad se hace evidente cuando se invoca 'fw_change()' en un filtro existente, lo que provoca que toda la estructura 'tcf_result struct' se copie sistemáticamente en la nueva instancia del filtro. Esto supone un reto cuando se actualiza un filtro asociado a una clase, ya que la función 'tcf_unbind_filter()' se lanza siempre sobre la instancia antigua dentro de la ruta de éxito. Esta acción reduce el 'filter_cnt' de la clase aún referenciada y la hace elegible para ser eliminada, resultando finalmente en una situación de uso después de libre.
CVE-2023-4208
La explotación de una vulnerabilidad de uso después de la liberación en el componente 'net/sched: cls_u32' del kernel de Linux puede permitir la elevación local de privilegios. La vulnerabilidad se hace evidente durante la ejecución de 'u32_change()' en un filtro existente. En este proceso, toda la estructura 'tcf_result struct' se copia invariablemente en la nueva instancia del filtro. Esto crea un problema al actualizar un filtro asociado a una clase, ya que la función 'tcf_unbind_filter()' se invoca sistemáticamente en la instancia antigua dentro de la ruta de éxito. En consecuencia, esta acción reduce el 'filter_cnt' de la clase aún referenciada y permite su eliminación, lo que en última instancia conduce a un escenario de uso después de libre.
CVE-2023-4244
Se ha encontrado una vulnerabilidad de uso después de libre en el componente 'netfilter: nf_tables' del kernel de Linux. Esta vulnerabilidad surge de una condición de carrera que ocurre entre la transacción del plano de control de netlink de nf_tables y la recolección de basura de los elementos nft_set. Esta condición de carrera tiene el potencial de desencadenar un desbordamiento insuficiente en el contador de referencia, lo que lleva a la aparición de una vulnerabilidad de uso después de libre.
CVE-2023-4622
La escalada local de privilegios puede lograrse a través de la explotación de una vulnerabilidad de uso después de libre dentro del componente 'af_unix' del kernel de Linux. Esta vulnerabilidad proviene de la función 'unix_stream_sendpage()', que intenta añadir datos al último skb (búfer de socket) en la cola de recepción del destinatario sin adquirir los bloqueos necesarios. Consecuentemente, surge una condición de carrera donde 'unix_stream_sendpage()' puede potencialmente acceder a un skb que está en proceso de ser liberado por la recolección de basura, llevando a un escenario de uso después de libre.
¿Cómo mitigar estas vulnerabilidades?
Las vulnerabilidades de escalada local de privilegios son muy preocupantes porque pueden utilizarse para saltarse las restricciones a nivel de usuario y hacerse con el control de un sistema. Por lo tanto, es fundamental mantenerse actualizado y aplicar parches con regularidad para mitigar dichas vulnerabilidades y sus riesgos potenciales. Omitir o retrasar los parches puede afectar negativamente a la seguridad y al funcionamiento del servidor.
La mejor forma de evitar retrasos en los parches es utilizar una solución de parcheo automatizado como KernelCare Enterprise. KernelCare aplica automáticamente parches de seguridad al núcleo de Linux mientras éste se está ejecutando. Esto significa que es necesario reiniciar el núcleo, lo que supone un quebradero de cabeza para los administradores de sistemas.
Este tipo de parcheado se conoce como live patching, en el que los parches se aplican sin reiniciar. Esto elimina el tiempo de inactividad relacionado con los parches o las ventanas de mantenimiento, manteniendo en última instancia el 100% del tiempo de actividad de los servidores sin interrumpir ningún servicio.
Hable con nuestros expertos para saber más sobre la aplicación de parches en vivo en Linux y cómo funciona.
Fuente: NIST