La bibliothèque GNU C (GLIBC) sert de bibliothèque C dans le système GNU et fait partie intégrante des systèmes basés sur Linux. À la base, GLIBC définit les fonctionnalités essentielles pour les programmes, y compris les appels système et les fonctions communes comme Open, Malloc, Printf et Exit. Le chargeur dynamique, une composante vitale de GLIBC, joue un rôle clé dans la préparation et l'exécution de programmes en gérant les bibliothèques partagées et en les liant à l'exécution.
Introduit pour autoriser les utilisateurs sans recompilation, la variable d'environnement GLIBC_TUNables permet aux utilisateurs de modifier le comportement de GLIBC au moment de l'exécution. Il fournit un moyen d'ajuster les paramètres des performances et du comportement, affectant le démarrage de l'application.
Une vulnérabilité de débordement de tampon dans le traitement dynamique du chargeur de glibc_tunables pose un risque de sécurité critique. L'exploitation accorde aux attaquants locaux des privilèges élevés, conduisant potentiellement à un accès root complet. Une exploitation réussie sur des distributions majeures comme Fedora, Ubuntu et Debian souligne la gravité et l'impact généralisé.
L'utilisation abusive ou l'exploitation de cette vulnérabilité peut avoir un impact sur 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 se transformer rapidement en attaques uniquement. Les distributions Linux populaires utilisant GLIBC peuvent être sensibles, soulignant la nécessité d'une conscience et d'une atténuation rapides.
Assigné: 3 octobre 2023
Type: Escalade des privilèges locaux
Versions affectées: GLIBC 2.34 et plus tard
Distributions: Rhel, Ubuntu, Fedora, Debian, Amazon Linux, Gentoo et autres en utilisant l'atténuation de GLIBC
Mise à niveau: appliquez rapidement les mises à jour GLIBC.
Moniteur: Restez informé des avis de sécurité.
Revue: Évaluez l'utilisation de GLIBC_TUNables dans les applications.
Audit: examinez les journaux système pour une activité suspecte.
Ubuntu 22.04 Ubuntu Glibc 2.35-0ubuntu3.1 Su de Util-Linux 2.37.2 ASLR sur
USI UBUNTU (version 22.04.1) ISO pour créer une machine virtuelle
Après une installation réussie, nous ne devons rien mettre à jour mais nous installerons le package Git et GNU Binutils car il ne se trouve pas dans le système, et lorsque vous compilez le script Python Exploit, vous affronterez l'erreur.
En utilisant ces commandes:
$ sudo apt install git
$ sudo apt install binutils
Vérifiez si c'est vulnérable
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
S'il sort
Segmentation fault (core dumped)
, il est vulnérable.
Vérifiez la version du linker / chargeur dynamique, souvent associé à la bibliothèque GNU C (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 à intensifier les privilèges
Remarque: nous ne devons pas installer GCC dans la machine, si nous l'installeront, il perdra sa vulnérabilité, donc le script ne fonctionnera pas.
Étant donné que nous n'avons pas installé GCC et que nous devons compiler le programme C dans la machine hôte, puis l'importer dans la machine invitée.
Nous pouvons compiler le programme C avec cette commande
$ gcc exploit.c -o (outputname)
Après l'importation du fichier de sortie du programme C, importez également le script Python (Genlib.py).
Compilez maintenant le script Python
$ python3 genlib.py
Après avoir compilé un dossier '' 'est créé.
Nous le ferons dans le dossier / tmp pour que l'utilisateur puisse exécuter un script et un programme
Maintenant, nous allons enfin exécuter le programme pour dégénérer les privilèges racine
$ ./(nameoftheprogram)
Cela prendra un certain temps et obtiendra la coque racine.
Sécurisé à responsabiliser, pas à exploiter!
Références: