Glibc 2.34 llega con soluciones de vulnerabilidades, nuevas funciones para Linux y mas
Hace poco se dio a conocer la liberación de la nueva versión de Glibc 2.34 la cual llega después de seis meses de desarrollo y en la cual se han realizado diversos cambios bastante importantes, entre los cuales destaca la inclusión de las librerias libpthread, libdl, libutil y libanl, asi como tambien diversas correcciones de errores de las cuales una de ellas causaba bloqueos.
Para quienes desconocen de Glibc, deben saber que es una biblioteca C de GNU, comúnmente conocida como glibc es la biblioteca de tiempo de ejecución estándar del lenguaje C de GNU. En los sistemas en los que se usa, esta biblioteca de C que proporciona y define las llamadas al sistema y otras funciones básicas, es utilizada por casi todos los programas.
Principales novedades de Glibc 2.34
En esta nueva versión de Glibc 2.34 que se presenta se han integrado a la librería principal libpthread, libdl, libutil y libanl, el uso de su funcionalidad en aplicaciones ya no requiere vincularlas con los indicadores -lpthread, -ldl, -lutil y -lanl.
Además, se menciona que se han realizado preparativos para integrar libresolv en libc, con lo cual la integración permitirá un proceso de actualización glibc más fluido y simplificará la implementación del tiempo de ejecución y tambien se han proporcionado bibliotecas stub para compatibilidad con aplicaciones creadas con versiones anteriores de glibc.
Por la parte de los cambios enfocados para Linux en Glibc 2.34 se destaca la capacidad añadida de usar el tipo time_t de 64 bits en configuraciones que tradicionalmente usaban el tipo time_t de 32 bits. Esta función solo está disponible en sistemas con un kernel 5.1 y superiores.
Otro cambio especifico para Linux es la implementación de la función execveat, que permite ejecutar un archivo ejecutable desde un descriptor de archivo abierto. La nueva función también se utiliza en la implementación de la llamada fexecve, que no requiere que el pseudo-sistema de archivos /proc esté montado al inicio.
Tambien se añadió la función close_range() que está disponible para versiones de Linux 5.9 y superiores y la cual puede ser utilizada para permitir que un proceso cierre un rango completo de descriptores de archivos abiertos a la vez, además se implementa el parámetro glibc.pthread.stack_cache_size, que se puede usar para ajustar el tamaño de la caché de la pila pthread.
Por otra parte, se agregó la función _Fork, un reemplazo para la función fork que cumple con los requisitos de «async-signal-safe», es decir que se puede llamar de forma segura desde los controladores de señales. Durante la ejecución de _Fork, se forma un entorno mínimo, suficiente para llamar a funciones en manejadores de señales como raise y execve, sin invocar características que puedan cambiar los bloqueos o el estado interno.
Por la parte de las vulnerabilidades solucionadas en Glibc 2.34 se mencionan las siguientes:
CVE-2021-27645: Fallo del proceso nscd (demonio de almacenamiento en caché del servidor de nombres) debido a una doble llamada a la función gratuita mientras se procesaban solicitudes de grupos de red especialmente diseñadas.
CVE-2021-33574: acceso a un área de memoria ya liberada (use-after-free) en la función mq_notify cuando se usa el tipo de notificación SIGEV_THREAD con un atributo de subproceso para el cual se establece una máscara de enlace de CPU alternativa. El problema puede provocar un bloqueo, pero no se excluyen otras opciones de ataque.
CVE-2021-35942: El desbordamiento del tamaño del parámetro en la función wordexp podría bloquear la aplicación.
De los demás cambios que se destacan:
- Se agregó la función timespec_getres, definida en el borrador del estándar ISO C2X y se aumentó la función timespec_get con capacidades similares a la función POSIX clock_getres.
- En el archivo gconv-modules, solo quedaba un conjunto mínimo de módulos gconv principales, y el resto se movió a un archivo adicional gconv-modules-extra.conf ubicado en el directorio gconv-modules.d.
- Se eliminó el uso de enlaces simbólicos para vincular objetos compartidos instalables a la versión de Glibc. Estos objetos ahora se instalan tal cual (por ejemplo, libc.so.6 ahora es un archivo en lugar de un enlace a libc-2.34.so).
- En Linux, funciones como shm_open y sem_open ahora requieren un sistema de archivos para la memoria compartida montada en el punto de montaje /dev/shm.
Finalmente si estás interesado en poder conocer más al respecto de esta nueva versión, puedes consultar los detalles en el siguiente enlace.