Wir haben CVE-2023-4911 Looney Tunables behandelt und erklärt, das fast alle Linux-Distributionen betrifft und es einem Angreifer ermöglicht, die Rechte auf Root zu erhöhen. Die Sicherheitslücke betrifft den dynamischen Loader der GNU C-Bibliothek, bekannt als ld.so, während er die Umgebungsvariable GLIBC_TUNABLES verarbeitet. Dieses Problem könnte es einem lokalen Angreifer ermöglichen, böswillig erstellte Umgebungsvariablen GLIBC_TUNABLES zu verwenden, wenn er Binärdateien mit SUID-Berechtigung startet, um Code mit erhöhten Rechten auszuführen. Wir haben ein Labor-Setup verwendet, um diesen Exploit speziell auszuprobieren, indem wir Versuchen SieHackMe.
LD.SO: Der dynamische Linker/Loader
Immer wenn Sie eine ELF-Datei ausführen, die von gemeinsam genutzten Bibliotheken abhängt (.Also
Dateien), muss das Betriebssystem solche Bibliotheken laden und sie mit Ihrer ausführbaren Datei verknüpfen, damit Ihrem Programm während der Ausführung alle gemeinsam genutzten Funktionen zur Verfügung stehen. In Linux Systeme, dies wird normalerweise verwaltet von ld.so
, eine ausführbare Datei, die als Teil des glibc
Bibliothek.
Jede ausführbare ELF-Datei enthält einen Abschnitt namens .interp
, wobei der Speicherort des erforderlichen Loaders angegeben wird, damit das Betriebssystem weiß, welcher spezifische Loader verwendet werden soll.
CVE-2023-4911 Ausnutzung der Sicherheitslücke
Wir werden uns mit der Ausbeutungsphase näher befassen, indem wir Folgendes verwenden: PoC.
- Einrichten von Umgebungsvariablen
Der Exploit erstellt verschiedene Arrays (Zeile 41), die später zum Speichern derGLIBC_TUNABLES
Umgebungsvariablen und lösen bei der Ausführung des Programms einen Pufferüberlauf in glibc aus. - Umgebungsvariablen erstellen
Füllstoff
: Diese Variable wird erstellt, um den Lese-/Schreibabschnitt des Loaders aufzufüllen. Sie wird mit einer langen Folge von 'F'-Zeichen ('F') gefüllt. (Zeilen 17-23)
kv
: Diese Variable ist die Nutzlast, die den Pufferüberlauf auslöst. Sie ist mit einer langen Folge von 'A'-Zeichen ('A') gefüllt. (Zeilen 27-33)
Füllstoff2
: Ähnlich wie Füllzeichen wird diese Variable verwendet, um zusätzliche Teile aufzufüllen. Sie wird auch mit einer Folge von „F“-Zeichen aufgefüllt. (Zeilen 37-43)
dt_rpath
: Diese Variable wird verwendet, um einen bestimmten Wert zu erstellen-0x14ULL
um Speicherbereiche im Ausnutzungsprozess zu überschreiben. (Zeilen 47-53)Alle diese Variablen werden in dieenvp
Array, das Umgebungsvariablen enthält. - Bewaffnung
Die Nutzlast inGLIBC_TUNABLES
macht folgendes mit ld.so: Es überschreibt einen Abschnitt des Stacks mit einem Index, der auf einen String mit"
als Inhalt. Die Absicht besteht darin, den Stapel so zu manipulieren, dass der Index auf eine bestimmte Speicheradresse zeigt, an der das Zeichen ” (ein doppeltes Anführungszeichen) gespeichert ist. Der Stapel ist ein Speicherbereich, der zum Speichern lokaler Variablen und Funktionsaufrufinformationen während der Programmausführung verwendet wird. Um die Komplexität des Exploits zu erhöhen, randomisieren moderne Betriebssysteme den Speicherort des Stapels, wodurch es schwierig wird, vorherzusagen, wo der Index im Speicher landet. - Ausbeutung:
Der Exploit verwendet einen Trial-and-Error-Ansatz, um die Zufälligkeit des Speicherorts des Stacks zu berücksichtigen. Er führt das Programm wiederholt aus (aufspaltet und führt es aus), bis er Glück hat und die feste Adresse0x7ffdffffff030
stimmt mit der Adresse überein, auf die der Stapelindex zeigt. Dies manipuliert effektiv den Suchpfad der Bibliothek, sodass er auf das Verzeichnis mit dem Namen zeigt"
die eine bösartige Version vonlib6.so
.
Der Prozess zur Herstellung der geschmiedetenlibc6.so
besteht aus dem Kopieren von libc6.so, aber dem Ersetzen der__libc_start_main
Funktion mit einem benutzerdefinierten Shellcode, dersetuid(0) + setgid(0) + exec('/bin/sh')
. Das Python-Skript hierfür finden Sie Hier.
Das Programm tritt in eine Schleife ein, in der es einen Kindprozess aufspaltet: Im Kindprozess versucht es,/usr/bin/su
mit--helfen
Wenn der untergeordnete Prozess länger als eine Sekunde braucht, wird davon ausgegangen, dass er von einer Shell zurückkehrt, was auf einen potenziell erfolgreichen Exploit hinweist.
CVE-2023-4911 Schadensbegrenzung
Wenn Sie den Patch nicht installieren können, folgen Sie den Anweisungen dieser Link zur Schadensminderung
CVE-2023-4911 Behebung
Das Patchen Ihres Systems ist die beste und einzige Möglichkeit zur Behebung des Problems.
Raumantworten
/root/root.txt
?Video-Komplettlösung