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

OSCP-Notizen abrufen

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.

  1. Einrichten von Umgebungsvariablen

    Der Exploit erstellt verschiedene Arrays (Zeile 41), die später zum Speichern der GLIBC_TUNABLES Umgebungsvariablen und lösen bei der Ausführung des Programms einen Pufferüberlauf in glibc aus.
  2. Umgebungsvariablen erstellenFü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 die envp Array, das Umgebungsvariablen enthält.
  3. Bewaffnung

    Die Nutzlast in GLIBC_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.
  4. 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 Adresse 0x7ffdffffff030 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 von lib6.so.
    Der Prozess zur Herstellung der geschmiedeten libc6.so besteht aus dem Kopieren von libc6.so, aber dem Ersetzen der __libc_start_main Funktion mit einem benutzerdefinierten Shellcode, der setuid(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 --helfenWenn 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

Welchen Wert hat die Flagge in /root/root.txt?

Video-Komplettlösung

Über den Autor

Ich erstelle Notizen zur Cybersicherheit, Notizen zum digitalen Marketing und Online-Kurse. Ich biete auch Beratung zum digitalen Marketing an, einschließlich, aber nicht beschränkt auf SEO, Google- und Meta-Anzeigen und CRM-Verwaltung.

Artikel anzeigen