Encontraron dos vulnerabilidades en el Kernel de Linux

febrero 11, 2022 , 0 Comments

Hace pocos dias se dio a conocer la noticia de que fueron identificadas dos vulnerabilidades en el Kernel de Linux la primera de ellas ya catalogada como CVE-2022-0435 y fue encontrada en el módulo del kernel de Linux que proporciona el funcionamiento del protocolo de red TIPC (Comunicación transparente entre procesos).

Esta vulnerabilidad podría permitir que el código se ejecute a nivel del kernel mediante el envío de un paquete a una red especialmente diseñada.

El problema solo afecta a los sistemas con el módulo de kernel tipc.ko cargado y configurado con la pila TIPC, que normalmente se usa en clústeres y no está habilitado de forma predeterminada en distribuciones de Linux no especializadas.

La vulnerabilidad es causada por un desbordamiento de pila que ocurre al procesar paquetes, el valor del campo con el número de nodos miembros del dominio en el que supera los 64.

Para almacenar los parámetros de los nodos en el módulo tipc.ko, una matriz fija «u32 miembros[64 ]», pero en el proceso de procesamiento de lo especificado en el paquete. El número de nodo no comprueba el valor «member_cnt», lo que permite que se utilicen valores superiores a 64 para la sobrescritura controlada de datos en el área de memoria a continuación. la pila después de la estructura «dom_bef».

El protocolo TIPC fue desarrollado originalmente por Ericsson, está diseñado para organizar la comunicación entre procesos en un clúster y se activa principalmente en los nodos del clúster. TIPC puede funcionar tanto sobre Ethernet como sobre UDP (puerto de red 6118).

Cuando se trabaja sobre Ethernet, se puede realizar un ataque desde la red local, y cuando se usa UDP, desde la red global, si el puerto no está cubierto por un firewall. El ataque también puede ser realizado por un usuario local sin privilegios en el host. Para activar TIPC, debe cargar el módulo de kernel tipc.ko y configurar el enlace a una interfaz de red mediante netlink o la utilidad tipc.

Se menciona que cuando se construye el kernel en el modo «CONFIG_FORTIFY_SRC=y» (usado en RHEL), que agrega comprobaciones de límites adicionales a la función memcpy(), la operación se limita a una parada de emergencia (el kernel cae en estado «Kernel Panic»).

Si se ejecuta sin comprobaciones adicionales y si se filtra información sobre las marcas canary utilizadas para proteger la pila, el problema se puede utilizar para ejecutar código de forma remota con derechos de kernel. Los investigadores que identificaron el problema dicen que la técnica de explotación es trivial y se revelará después de la eliminación generalizada de la vulnerabilidad en las distribuciones.

El error que generó la vulnerabilidad se introdujo el 15 de junio de 2016 y pasó a formar parte del kernel de Linux 4.8. La vulnerabilidad se solucionó en las versiones del kernel de Linux 5.16.9, 5.15.23, 5.10.100, 5.4.179, 4.19.229, 4.14.266 y 4.9.301.

Otra de las vulnerabilidades que fue encontrada en el kernel de Linux es CVE-2022-24122  en el código para manejar restricciones rlimit en diferentes espacios de nombres de usuario.

El error se introdujo en un cambio agregado en el verano de 2021, moviendo la implementación de algunos contadores RLIMIT para usar la estructura «ucounts». Los objetos «ucounts» creados para RLIMIT continuaron usándose después de liberar la memoria asignada para ellos (use-after-free) al eliminar el espacio de nombres asociado a ellos, lo que hizo posible lograr la ejecución de su código a nivel de kernel.

La explotación de la vulnerabilidad por parte de un usuario sin privilegios solo es posible si el sistema tiene acceso sin privilegios al espacio de nombres del identificador de usuario (espacio de nombres de usuario sin privilegios), que está habilitado de forma predeterminada en Ubuntu y Fedora, pero no activado en Debian y RHEL.

Como solución alternativa para bloquear la vulnerabilidad, puede deshabilitar el acceso sin privilegios al espacio de nombres del usuario:

sysctl -w kernel.unprivileged_userns_clone=0

El problema ha estado presente desde el kernel de Linux 5.14 y se solucionará en las actualizaciones 5.16.5 y 5.15.19. Las ramas estables de Debian, Ubuntu, SUSE/openSUSE y RHEL no se ven afectadas por el problema, pero aparecen en los kernels nuevos de Fedora y Arch Linux .


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.