
Dépôt contenant une preuve de concept (PoC) démontrant l'impact de CVE-2023-4911, une vulnérabilité dans le chargeur dynamique ld.so de glibc, exposant des risques liés à Looney Tunables.
La bibliothèque C GNU (glibc) sert de bibliothèque C dans le système GNU et fait partie intégrante des systèmes basés sur Linux. Au cœur de glibc se trouvent des fonctionnalités essentielles pour les programmes, notamment les appels système et des fonctions courantes comme open, malloc, printf et exit. Le chargeur dynamique, un composant vital de glibc, joue un rôle clé dans la préparation et l'exécution des programmes en gérant les bibliothèques partagées et en les liant à l'exécution.
Introduite pour donner aux utilisateurs plus de contrôle sans recompilation, la variable d'environnement GLIBC_TUNABLES permet aux utilisateurs de modifier le comportement de glibc à l'exécution. Elle offre un moyen d'ajuster les paramètres de performance et de comportement, affectant le démarrage des applications.
Une vulnérabilité de débordement de tampon dans le traitement du chargeur dynamique de GLIBC_TUNABLES pose un risque critique pour la sécurité. L'exploitation accorde aux attaquants locaux des privilèges élevés, pouvant conduire à un accès root complet. L'exploitation réussie sur des distributions majeures comme Fedora, Ubuntu et Debian souligne la gravité et l'impact étendu.
L'utilisation abusive ou l'exploitation de cette vulnérabilité peut affecter les performances, la fiabilité et la sécurité du système. Bien que les détails de l'exploit soient retenus, le risque est imminent, car les débordements de tampon peuvent rapidement se transformer en attaques uniquement basées sur les données. Les distributions Linux populaires utilisant glibc peuvent être vulnérables, soulignant la nécessité d'une sensibilisation et d'une mitigation rapides.
Attribué : 3 octobre 2023
Type : Élévation de privilèges locale
Versions affectées : glibc 2.34 et ultérieures
Distributions : RHEL, Ubuntu, Fedora, Debian, Amazon Linux, Gentoo et autres utilisant glibc Atténuation
Mise à jour : Appliquer rapidement les mises à jour de glibc.
Surveillance : Rester informé des avis de sécurité.
Révision : Évaluer l'utilisation de GLIBC_TUNABLES dans les applications.
Audit : Examiner les journaux système pour toute activité suspecte.
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 su from util-linux 2.37.2 ASLR ON
Utilisation de l'ISO Ubuntu (version 22.04.1) pour créer la machine virtuelle
Après une installation réussie, nous n'avons rien à mettre à jour, mais nous allons installer les paquets git et GNU Binutils car ils ne sont pas présents dans le système, et lorsque vous compilerez le script Python de l'exploit, vous rencontrerez une erreur.
En utilisant ces commandes :
$ sudo apt install git
$ sudo apt install binutils
Vérifier si c'est vulnérable
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Si cela affiche
Segmentation fault (core dumped)alors c'est vulnérable.
vérifier la version du linker/chargeur dynamique, souvent associé à la bibliothèque C GNU (glibc)
$ ldd --version
La sortie donnera la version de GLIBC
ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Maintenant que nous savons que notre machine est vulnérable et prête à élever les privilèges root
Remarque : Nous ne devons pas installer gcc sur la machine, si nous l'installons, elle perdra sa vulnérabilité, donc le script ne fonctionnera pas.
Comme nous n'avons pas gcc installé et que nous devons compiler le programme C sur la machine hôte, puis l'importer sur la machine invitée.
nous pouvons compiler le programme C avec cette commande
$ gcc exploit.c -o (outputname)
Après avoir importé le fichier de sortie du programme C, importez également le script python (genlib.py).
Compilez maintenant le script python
$ python3 genlib.py
Après la compilation, un dossier nommé '"' est créé.
Nous ferons cela dans le dossier /tmp pour que l'utilisateur puisse exécuter le script et le programme
Maintenant, enfin, nous exécuterons le programme pour élever les privilèges root
$ ./(nameoftheprogram)
Cela prendra du temps et vous obtiendrez le shell root.
Sécuriser pour habiliter, pas pour exploiter !
Références :