Después de seis meses de desarrollo lanzamiento de la biblioteca del sistema (glibc) , que cumple completamente con los estándares ISO C11 y POSIX.1-2017. La nueva versión incluye correcciones de 67 desarrolladores.
Las mejoras implementadas en Glibc 2.32 se pueden destacar:
- Se agregó soporte para procesadores Synopsys ARC HS (ARCv2 ISA). Para que el puerto funcione se requiere un mínimo de binutils 2.32, gcc 8.3 y núcleo Linux 5.1. Se admiten tres variantes de ABI: arc-linux-gnu, arc-linux-gnuhf y arceb-linux-gnu (big-endian);
- Se implementó la carga de módulos de auditoría, especificados en las secciones DT_AUDIT y
DT_DEPAUDIT del ejecutable. - Para la arquitectura powerpc64le, se agregó soporte para el tipo IEEE128 long double, que se activa al compilar con la opción "-mabi=ieeolongdouble".
- Algunas API están anotadas usando el atributo ‘access’ de GCC, lo que permite generar advertencias de mejor calidad al definir posibles desbordamientos de búfer y otros tipos de sobrepasos de límites cuando se compila con GCC 10.
- Para sistemas Linux, se implementaron las funciones pthread_attr_setsigmask_np y
pthread_attr_getsigmask_np, que permiten a la aplicación especificar una máscara de señal para los hilos creados usando pthread_create. - Los datos de codificación, la información sobre tipos de caracteres y las tablas de transliteración se han actualizado para soportar la especificación Unicode 13.0.0;
- Se agregó un nuevo archivo de encabezado , que define la variable __libc_single_threaded, que se puede usar en aplicaciones para optimizaciones de un solo hilo.
- Se añadieron las funciones sigabbrev_np y sigdescr_np, que devuelven el nombre abreviado y la descripción de una señal (por ejemplo, «HUP» y «Hangup» para SIGHUP).
- Se añadieron las funciones strerrorname_np y strerrordesc_np, que devuelven el nombre y la descripción del error (por ejemplo, «EINVAL» y «Invalid argument» para EINVAL).
- Se ha añadido una bandera «—enable-standard-branch-protection» (o -mbranch-protection=standard en GCC) para la plataforma ARM64, activando el mecanismo ARMv8.5-BTI (Branch Target Indicator) para proteger la ejecución de conjuntos de instrucciones en las que no deben realizarse saltos durante la ramificación. El bloqueo de saltos a áreas de código arbitrarias se implementa para contrarrestar la creación de gadgets en exploits que utilizan técnicas de programación orientada a retornos (ROP — Return-Oriented Programming, donde el atacante no intenta colocar su propio código en la memoria, sino que opera con trozos existentes de instrucciones de máquina, que terminan con una instrucción de retorno de control, formando una cadena de llamadas para obtener la funcionalidad deseada).
- Se ha llevado a cabo una limpieza considerable de características obsoletas, incluidas la eliminación de las opciones «—enable-obsolete-rpc» y «—enable-obsolete-nsl», y del archivo de encabezado . Se declaran obsoletas las funciones sstk, siginterrupt, sigpause, sighold, sigrelse, sigignore y sigset, los arreglos sys_siglist, _sys_siglist y sys_sigabbrev, y los símbolos sys_errlist, _sys_errlist, sys_nerr y _sys_nerr, así como el módulo NSS hesiod.
- El ldconfig se ha cambiado por defecto para usar un nuevo formato ld.so.cache, que ha sido compatible con glibc durante casi 20 años.
- Se han corregido vulnerabilidades:
- CVE-2016-10228 — un bucle infinito en la utilidad iconv que se manifiesta al ejecutarla con la opción «-c», al procesar datos multibyte incorrectos.
- CVE-2020-10029 — corrupción de pila al llamar a funciones trigonométricas con un argumento pseudo-nulo.
- CVE-2020-1752 — acceso a una zona de memoria después de que ha sido liberada (use-after-free) en la función glob al expandir un enlace al directorio personal («~user») en rutas.
- CVE-2020-6096 — un manejo incorrecto en la plataforma ARMv7 de valores negativos para el argumento en memcpy() y memmove(), que define el tamaño del área a copiar. organizar la ejecución de código al procesar en las funciones memcpy() y memmove() datos estructurados de manera particular. Es notable que el problema sin resolver durante casi dos meses desde la divulgación pública de la información y cinco meses desde que se notificó a los desarrolladores de Glibc.
Fuente: opennet.ru
