La nouvelle version de Glibc, la 2.34, a été récemment annoncée. Après six mois de développement, elle intègre plusieurs modifications importantes, notamment les bibliothèques libpthread, libdl, libutil et libanl, ainsi que diverses corrections de bogues, dont un qui provoquait des plantages.
Pour ceux qui ne connaissent pas Glibc, il s'agit d'une bibliothèque C GNU, communément appelée glibc, et qui constitue la bibliothèque d'exécution standard du langage C GNU. Sur les systèmes où elle est utilisée, cette bibliothèque C, qui fournit et définit les appels système et d'autres fonctions de base, est utilisée par la quasi-totalité des programmes.
Principales nouveautés de la Glibc 2.34
Dans cette nouvelle version de Glibc 2.34, les bibliothèques principales libpthread, libdl, libutil et libanl ont été intégrées ; l'utilisation de leurs fonctionnalités dans les applications ne nécessite plus de les lier avec les indicateurs -lpthread, -ldl, -lutil et -lanl.
De plus, il est indiqué que des préparatifs ont été entrepris pour intégrer libresolv à libc, ce qui facilitera la mise à niveau de glibc et simplifiera son implémentation à l'exécution. Des bibliothèques de substitution ont également été fournies pour assurer la compatibilité avec les applications développées avec des versions antérieures de glibc.
Parmi les modifications apportées à Glibc 2.34 pour Linux, la plus notable est la possibilité d'utiliser le type `time_t` 64 bits dans les configurations qui utilisaient traditionnellement le type `time_t` 32 bits . Cette fonctionnalité est uniquement disponible sur les systèmes dotés d'un noyau Linux version 5.1 ou supérieure.
Une autre modification spécifique à Linux concerne l' implémentation de la fonction `execveat` , qui permet d'exécuter un fichier exécutable à partir d'un descripteur de fichier ouvert . Cette nouvelle fonction est également utilisée dans l'implémentation de l'appel `fexecve`, qui ne nécessite pas le montage du pseudo-système de fichiers `/proc` au démarrage.
La fonction `close_range()` a également été ajoutée. Disponible pour Linux 5.9 et versions ultérieures, elle permet à un processus de fermer simultanément une plage entière de descripteurs de fichiers ouverts. De plus, le paramètre `glibc.pthread.stack_cache_size` a été implémenté ; il permet d’ajuster la taille du cache de pile des threads.
De plus, la fonction `_Fork` a été ajoutée. Elle remplace la fonction `fork` et répond aux exigences de sécurité des signaux asynchrones, ce qui signifie qu'elle peut être appelée sans risque depuis les gestionnaires de signaux. Lors de son exécution, `_Fork` crée un environnement minimal suffisant pour appeler des fonctions dans les gestionnaires de signaux, telles que `raise` et `execute`, sans solliciter de fonctionnalités susceptibles de modifier les verrous ou l'état interne.
Pour la partie des vulnérabilités corrigées dans la Glibc 2.34, sont mentionnées :
CVE-2021-27645 : défaillance du processus nscd (démon de mise en cache du serveur de noms) due à un double appel à la fonction free lors du traitement de requêtes de groupe réseau spécialement conçues.
CVE-2021-33574 : Accès à une zone mémoire libérée (use-after-free) dans la fonction mq_notify lors de l’utilisation du type de notification SIGEV_THREAD avec un attribut de thread pour lequel un masque de liaison CPU alternatif est défini. Ce problème peut entraîner un plantage, mais d’autres méthodes d’attaque ne sont pas exclues.
CVE-2021-35942 : Un dépassement de la taille du paramètre dans la fonction wordexp peut entraîner le plantage de l’application.
Parmi les autres changements notables, citons :
- La fonction timespec_getres, définie dans le projet de norme ISO C2X, a été ajoutée et la fonction timespec_get a été augmentée avec des capacités similaires à la fonction POSIX clock_getres.
- Dans le fichier gconv-modules, il ne restait qu'un ensemble minimal de modules gconv principaux, et le reste a été déplacé vers un fichier gconv-modules-extra.conf supplémentaire situé dans le répertoire gconv-modules.d.
- L'utilisation de liens symboliques pour lier des objets partagés installables à la version Glibc a été supprimée. Ces objets sont maintenant installés tels quels (par exemple, libc.so.6 est maintenant un fichier plutôt qu'un lien vers libc-2.34.so).
- Sous Linux, des fonctions comme shm_open et sem_open nécessitent désormais un système de fichiers pour la mémoire partagée montée sur le point de montage /dev/shm.
Enfin, si vous souhaitez en savoir plus sur cette nouvelle version, vous trouverez les détails en suivant ce lien.