La société Qualys a découvert une vulnérabilité dangereuse (CVE-2023-4911) dans le compileur ld.so fourni avec la bibliothèque C système Glibc (GNU libc). Cette vulnérabilité permet à un utilisateur local d'élever ses privilèges dans le système en spécifiant des données formattées de manière spécifique dans la variable d'environnement GLIBC_TUNABLES avant de lancer un fichier exécutable avec le drapeau suid root, par exemple, /usr/bin/su.
La possibilité d'exploiter avec succès la vulnérabilité a été démontrée dans Fedora 37 et 38, Ubuntu 22.04 et 23.04, Debian 12 et 13. On suppose que la vulnérabilité se manifeste également dans d'autres distributions utilisant Glibc. Les distributions basées sur la bibliothèque C système Musl, comme Alpine Linux, ne sont pas concernées par ce problème. La vulnérabilité a été corrigée dans un patch ajouté le 2 octobre. Les mises à jour des paquets dans les distributions peuvent être suivies sur les pages de Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, Gentoo, ALT Linux.
La vulnérabilité est causée par une modification apportée en avril 2021 et incluse dans la version glibc 2.34. En raison d'une erreur dans le code d'analyse de la chaîne spécifiée dans la variable d'environnement GLIBC_TUNABLES, une combinaison incorrecte de paramètres dans cette variable entraîne l'écriture de la valeur analysée en dehors du tampon alloué. Le problème se manifeste lorsque, au lieu des séquences standard «name=val», les paramètres sont spécifiés sous la forme d'une double affectation «name=name=val». Dans ce cas, l'affectation est traitée deux fois, d'abord comme «name=name=val», puis comme «name=val». Cette double traitement entraîne un résultat «name=name=val:name=val», dont la taille dépasse celle du tampon tunestr.
Les chercheurs ont préparé un exploit fonctionnant de manière stable, permettant d'obtenir les droits root lorsqu'il est utilisé avec presque n'importe quel programme ayant le drapeau suid root. Les exceptions incluent l'outil sudo (qui modifie la valeur ELF RUNPATH), les utilitaires chage et passwd sous Fedora (protégés par des règles SELinux spécifiques) et l'outil snap-confine sous Ubuntu (protégé par des règles AppArmor spécifiques). La méthode d'exploitation proposée ne fonctionne également pas dans RHEL 8 et RHEL 9, bien que ces versions soient vulnérables (une autre exploitation est nécessaire pour réaliser l'attaque). Le code de l'exploit sera publié ultérieurement après l'élimination généralisée de la vulnérabilité. Vous pouvez vérifier si votre système est vulnérable avec la commande indiquée ci-dessous, qui échouera en cas de problème : env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '192x' 1`" /usr/bin/su —help
On note également la correction de deux autres vulnérabilités dans Glibc :
- CVE-2023-4806 — accès à une zone mémoire déjà libérée (use-after-free) dans la fonction getaddrinfo(), se manifestant lorsque le plugin NSS ne réalise que des appels de retour «_gethostbyname2_r» et «_getcanonname_r», mais ne supporte pas l'appel «_gethostbyname3_r». Pour exploiter cette vulnérabilité, le serveur DNS doit renvoyer un grand nombre d'adresses IPv6 et IPv4 pour l'hôte demandé, ce qui entraînera l'échec du processus ayant appelé la fonction getaddrinfo pour la famille AF_INET6 avec les flags AI_CANONNAME, AI_ALL et AI_V4MAPPED.
- CVE-2023-5156 — fuite de contenu mémoire lors de l'appel de la fonction getaddrinfo pour la famille d'adresses AF_INET6 avec les flags AI_CANONNAME, AI_ALL et AI_V4MAPPED.
Source : opennet.ru
