Descubrieron una vulnerabilidad en la implementación de TIPC del kernel de Linux

noviembre 08, 2021 , 0 Comments

Hace poco se dio a conocer la noticia de que un investigador de seguridad identifico una vulnerabilidad crítica (ya catalogada bajo CVE-2021-43267) en la implementación del protocolo de red TIPC suministrado en el kernel de Linux, que permite la ejecución remota de código con privilegios del kernel mediante el envío de un paquete de red especialmente diseñado.

El peligro del problema se mitiga por el hecho de que el ataque requiere habilitar explícitamente el soporte de TIPC en el sistema (cargando y configurando el módulo del kernel tipc.ko), lo que no se realiza de forma predeterminada en las distribuciones de Linux no especializadas.

CodeQL es un motor de análisis que le permite ejecutar consultas en el código. Desde una perspectiva de seguridad, esto puede permitirle encontrar vulnerabilidades simplemente describiendo su apariencia. CodeQL luego se activará y encontrará todas las instancias de esa vulnerabilidad.

TIPC ha sido compatible desde el kernel de Linux 3.19, pero el código que conduce a la vulnerabilidad se incluyó en el kernel 5.10. El protocolo TIPC fue desarrollado originalmente por Ericsson, está destinado a organizar la comunicación entre procesos en un clúster y se activa principalmente en los nodos del clúster.

TIPC puede funcionar tanto a través de Ethernet como a través de UDP (puerto de red 6118). En el caso de trabajar a través de Ethernet, el ataque se puede realizar 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 llevado a cabo por un usuario local sin privilegios en el host. Para activar TIPC, debe cargar el módulo del kernel tipc.ko y configurar el enlace a la interfaz de red mediante netlink o la utilidad tipc.

El protocolo se implementa en un módulo del kernel empaquetado con todas las principales distribuciones de Linux. Cuando lo carga un usuario, se puede usar como un conector y se puede configurar en una interfaz usando netlink (o usando la herramienta de espacio de usuario tipc, que realizará estas llamadas de netlink) como un usuario sin privilegios.

TIPC se puede configurar para operar sobre un protocolo portador como Ethernet o UDP (en el último caso, el kernel escucha en el puerto 6118 los mensajes entrantes de cualquier máquina). Dado que un usuario con pocos privilegios no puede crear tramas ethernet sin procesar, configurar el portador en UDP facilita la escritura de un exploit local.

La vulnerabilidad se manifiesta en la función tipc_crypto_key_rc y es causada por la falta de verificación adecuada de la correspondencia entre lo especificado en el encabezado y el tamaño real de los datos al analizar paquetes con el tipo MSG_CRYPTO utilizados para obtener claves de cifrado de otros nodos en el clúster en para posteriormente descifrar los mensajes enviados desde estos nodos.

El tamaño de los datos copiados en la memoria se calcula como la diferencia entre los valores de los campos con el tamaño del mensaje y el tamaño del encabezado, pero sin tener en cuenta el tamaño real del nombre del algoritmo de cifrado transmitido en el mensaje y el contenido de la clave.

Se supone que el tamaño del nombre del algoritmo es fijo, y además se pasa un atributo separado con el tamaño para la clave, y el atacante puede especificar un valor en este atributo que difiera del valor real, lo que llevará a escribir en la cola del mensaje fuera del búfer asignado.

La vulnerabilidad está corregida en los núcleos 5.15.0, 5.10.77 y 5.14.16, aunque el problema aparece y aún no se ha solucionado en Debian 11, Ubuntu 21.04/21.10, SUSE (en la rama SLE15-SP4 aún no publicada), RHEL (aún no se detalla si la solución vulnerable se ha actualizado) y Fedora.

Aunque ya se ha lanzado una actualización del kernel para Arch Linux y las distribuciones con kernels anteriores a 5.10, como Debian 10 y Ubuntu 20.04, no se ven afectadas.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.


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.