Fa poc es va donar a conèixer l'alliberament de la nova versió de Glibc 2.34 que arriba després de sis mesos de desenvolupament i en la qual s'han realitzat diversos canvis força importants, entre els quals destaca la inclusió de les llibreries libpthread, libdl, libutil i libanl, així com també diverses correccions d'errors de les quals una d'elles causava bloc.
Per als que desconeixen Glibc, han de saber que és una biblioteca C del GNU, coneguda com a glibc és la biblioteca de temps d'execució estàndard del llenguatge C del GNU. En els sistemes en què es fa servir, aquesta biblioteca de C que proporciona i defineix les trucades al sistema i altres funcions bàsiques, és utilitzada per gairebé tots els programes.
Principals novetats de Glibc 2.34
En aquesta nova versió de Glibc 2.34 que es presenta s'han integrat a la llibreria principal libpthread, libdl, libutil i libanl , l'ús de la seva funcionalitat en aplicacions ja no requereix vincular-les amb els indicadors -lpthread, -ldl, -lutil i -lanl.
A més, s'esmenta que s'han realitzat preparatius per integrar lliuresolv a libc, de manera que la integració permetrà un procés d'actualització glibc més fluid i simplificarà la implementació del temps d'execució i també s'han proporcionat biblioteques stub per a compatibilitat amb aplicacions creades amb versions anteriors de glibc.
Per la part dels canvis enfocats per a Linux a Glibc 2.34 es destaca la capacitat afegida d'usar el tipus time_t de 64 bits en configuracions que tradicionalment feien servir el tipus time_t de 32 bits . Aquesta funció només està disponible en sistemes amb un nucli 5.1 i superiors.
Un altre canvi específic per a Linux és la implementació de la funció execveat , que permet executar un fitxer executable des d'un descriptor de fitxer obert . La nova funció també s'utilitza en la implementació de l'anomenada fexecve, que no requereix que el pseudo-sistema de fitxers /proc estigui muntat a l'inici.
També s'hi va afegir la funció close_range() que està disponible per a versions de Linux 5.9 i superiors i la qual pot ser utilitzada per permetre que un procés tanqui un rang complet de descriptors d'arxius oberts alhora, a més s'implementa el paràmetre glibc.pthread.stack_cache_size, que es pot utilitzar per ajustar.
D'altra banda, es va afegir la funció _Fork, un reemplaçament per a la funció fork que compleix els requisits d'async-signal-safe, és a dir que es pot trucar de forma segura des dels controladors de senyals. Durant l'execució de _Fork, es forma un entorn mínim, suficient per cridar funcions en manejadors de senyals com raise i execve, sense invocar característiques que puguin canviar els bloquejos o l'estat intern.
Per la part de les vulnerabilitats solucionades en Glibc 2.34 s'esmenten les següents:
CVE-2021-27645: Fallada del procés nscd (dimoni d'emmagatzematge en memòria cau del servidor de noms) degut a una doble trucada a la funció gratuïta mentre es processaven sol·licituds de grups de xarxa especialment dissenyades.
CVE-2021-33574: accés a una àrea de memòria ja alliberada (use-after-free) a la funció mq_notify quan s'usa el tipus de notificació SIGEV_THREAD amb un atribut de subprocés per al qual s'estableix una màscara d'enllaç de CPU alternativa. El problema pot provocar un bloqueig però no s'exclouen altres opcions d'atac.
CVE-2021-35942: El desbordament de la mida del paràmetre a la funció wordexp podria bloquejar l'aplicació.
Dels altres canvis que es destaquen:
- Es va agregar la funció timespec_getres, definida en l'esborrany de l'estàndard ISO C2X i es va augmentar la funció timespec_get amb capacitats similars a la funció POSIX clock_getres.
- A l'arxiu gconv-modules, només quedava un conjunt mínim de mòduls gconv principals, i la resta es va moure a un fitxer addicional gconv-modules-extra.conf ubicat al directori gconv-modules.d.
- Es va eliminar l'ús d'enllaços simbòlics per vincular objectes compartits instal a la versió de Glibc. Aquests objectes ara s'instal·len tal qual (per exemple, libc.so.6 ara és un arxiu en lloc d'un enllaç a libc-2.34.so).
- A Linux, funcions com shm_open i sem_open ara requereixen un sistema d'arxius per a la memòria compartida muntada en el punt de muntatge / dev / shm.
Finalment si estàs interessat a poder conèixer més sobre aquesta nova versió, pots consultar els detalls al següent enllaç.