ClickCease CVE-2021-38604 - Una nueva vulnerabilidad en Glibc | tuxcare.com

Únase a nuestro popular boletín

Únase a más de 4.500 profesionales de Linux y el código abierto.

2 veces al mes. Sin spam.

El equipo TuxCare identifica CVE-2021-38604, una nueva vulnerabilidad en glibc

13 de agosto de 2021 - Equipo de RRPP de TuxCare

El equipo TuxCare se encarga de realizar análisis en profundidad de las nuevas CVE. Esto se hace para cada nueva CVE que aparece y que afecta, directa o indirectamente, al ecosistema Linux. Comprobamos si las distribuciones a las que prestamos servicios se ven afectadas. Cuando una de estas CVE afecta a las distribuciones soportadas, los miembros del equipo se arremangan y empiezan a indagar en el código.

Mientras realizaba este trabajo sobre CVE-2021-33574, Nikita Popov, uno de los miembros de nuestro equipo, identificó un problema con glibc. Resulta que es posible provocar una situación en la que se desencadene un fallo de segmentación en una ruta de código específica dentro de la biblioteca. Esto puede, a su vez, provocar que la aplicación que utiliza la biblioteca se bloquee, dando lugar a un problema de denegación de servicio.

Hay que tener en cuenta que glibc proporciona las principales primitivas del sistema y está vinculado con la mayoría, si no todas, las demás aplicaciones de Linux, incluidos los compiladores e intérpretes de otros lenguajes. Es el segundo componente más importante de un sistema después del propio Kernel.

Este problema se introdujo con la corrección original de CVE-2021-33574, concretamente en el archivo mq_notify.c:

 

@@ -133,8 +133,11 @@ helper_thread (void *arg)
            (void) __pthread_barrier_wait (&notify_barrier);
        }
      else if (data.raw[NOTIFY_COOKIE_LEN – 1] == NOTIFY_REMOVED)
–       /* The only state we keep is the copy of the thread attributes.  */
–       free (data.attr);
+       {
+         /* The only state we keep is the copy of the thread attributes.  */
+         pthread_attr_destroy (data.attr);
+         free (data.attr);
+       }

 

Mientras que la llamada free() es inmune a los punteros NULL que se le pasan, pthread_attr_destroy() no lo es. Fue posible identificar dos situaciones donde el Kernel de Linux usaría el mensaje NOTIFY_REMOVED mientras pasaba atributos de thread copiados a lo largo del camino en el campo data.attr. Desafortunadamente, una aplicación host es capaz de pasar un valor NULL allí si quiere que glibc genere un hilo con atributos por defecto. En este caso, glibc haría referencia a un puntero NULL en pthread_attr_destroy, provocando un fallo en todo el proceso.

Siguiendo las directrices de divulgación responsable, tanto la vulnerabilidad como la corrección del código se enviaron al equipo responsable de glibc, y se solicitó una CVE en Mitre (CVE-2021-38604). En glibc, se asignó como bug 28213. Ya se ha incorporado a glibc.

También se ha enviado una nueva prueba al conjunto de pruebas automatizadas de glibc para detectar esta situación y evitar que se produzca en el futuro. A veces, los cambios en rutas de código no relacionadas pueden provocar cambios de comportamiento en otras partes del código sin que el programador sea consciente de ello. Esta prueba detectará esta situación.

Para contextualizar, la familia de funciones "mq_" proporciona funcionalidad API de cola de mensajes compatible con POSIX y notificaciones asíncronas de mensajes entrantes, y se utilizan normalmente para comunicaciones entre procesos.

 

Enlaces de interés:

https://sourceware.org/git/?p=glibc.git;a=commit;h=42d359350510506b87101cf77202fefcbfc790cb

https://sourceware.org/bugzilla/show_bug.cgi?id=28213

¿Desea automatizar la aplicación de parches de vulnerabilidad sin reiniciar el núcleo, dejar el sistema fuera de servicio o programar ventanas de mantenimiento?

Más información sobre Live Patching con TuxCare

Conviértete en escritor invitado de TuxCare

Empezar

Correo

Únete a

4,500

Profesionales de Linux y código abierto

Suscríbase a
nuestro boletín