Vulnerabilidad en el subsistema del kernel de Linux Netfilter

Se ha identificado una vulnerabilidad (CVE-2021-22555) en Netfilter, un subsistema del kernel de Linux utilizado para filtrar y modificar paquetes de red, que permite a un usuario local obtener privilegios de root en el sistema, incluso mientras se encuentra en un contenedor aislado. Se ha preparado para realizar pruebas un prototipo funcional de un exploit que evita los mecanismos de protección KASLR, SMAP y SMEP. El investigador que descubrió la vulnerabilidad recibió una recompensa de 20 dólares de Google por identificar un método para evitar el aislamiento de los contenedores de Kubernetes en un clúster kCTF.

El problema existe desde el kernel 2.6.19, lanzado hace 15 años, y es causado por un error en los controladores IPT_SO_SET_REPLACE e IP6T_SO_SET_REPLACE que provoca un desbordamiento del búfer al enviar parámetros con formato especial a través de una llamada setsockopt en modo de compatibilidad. En circunstancias normales, solo el usuario root puede realizar una llamada a compat_setsockopt(), pero los privilegios necesarios para realizar el ataque también pueden ser obtenidos por un usuario sin privilegios en sistemas con soporte para espacios de nombres de usuario habilitado.

Un usuario puede crear un contenedor con un usuario raíz independiente y explotar la vulnerabilidad desde allí. Por ejemplo, los "espacios de nombres de usuario" están habilitados de forma predeterminada en Ubuntu y Fedora, pero no en Debian y RHEL. El parche que soluciona la vulnerabilidad se adoptó en el kernel de Linux el 13 de abril. Las actualizaciones de paquetes ya han sido generadas por los proyectos Debian, Arch Linux y Fedora. En Ubuntu, RHEL y SUSE, se están preparando actualizaciones.

El problema ocurre en la función xt_compat_target_from_user() debido a un cálculo incorrecto del tamaño de la memoria al guardar estructuras del kernel después de la conversión de una representación de 32 bits a 64 bits. El error permite escribir cuatro bytes nulos en cualquier posición más allá del búfer asignado delimitado por el desplazamiento 0x4C. Esta característica resultó ser suficiente para crear un exploit que permitía obtener derechos de root: al borrar el puntero m_list->next en la estructura msg_msg, se crearon condiciones para acceder a los datos después de liberar memoria (use-after-free), lo que Luego se usó para obtener información sobre direcciones y cambios en otras estructuras mediante la manipulación de la llamada al sistema msgsnd().

Fuente: opennet.ru

Añadir un comentario