
Looney Tunables Lokale Rechteausweitung (CVE-2023-4911) Workshop
Looney Tunables – Workshop zur lokalen Privilegienerweiterung (CVE-2023-4911) (nur für Bildungszwecke)
In der Informatik ist ein dynamischer Linker der Teil eines Betriebssystems, der die von einem ausführbaren Programm benötigten gemeinsam genutzten Bibliotheken lädt und verknüpft, wenn es ausgeführt wird, indem er den Inhalt der Bibliotheken aus dem permanenten Speicher in den RAM kopiert, Sprungtabellen füllt und Zeiger verschiebt.
Zum Beispiel haben wir ein Programm, das die openssl-Bibliothek verwendet, um einen md5-Hash zu berechnen:``` $ head md5_hash.c #include <stdio.h> #include <string.h> #include <openssl/md5.h>
ld.so parst die Binärdatei und versucht, eine mit <openssl/md5.h> zusammenhängende Bibliothek zu finden.```
$ ldd md5_hash
linux-vdso.so.1 (0x00007fffa530b000)
libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007f19cda00000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f19cd81e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f19ce032000)
Wie wir sehen können, findet sie die benötigte Krypto-Bibliothek unter /lib/x86_64-linux-gnu/libcrypto.so.3 Während des Programmstarts legt sie den Code dieser Bibliothek in den Prozess-RAM und verknüpft alle Referenzen auf diese Bibliothek.
Wenn ein Programm gestartet wird, untersucht dieser Lader zunächst das Programm, um festzustellen, welche gemeinsamen Bibliotheken es benötigt. Anschließend sucht er nach diesen Bibliotheken, lädt sie in den Speicher und verknüpft sie zur Laufzeit mit der ausführbaren Datei. Dabei löst der dynamische Lader Symbolreferenzen auf, wie etwa Verweise auf Funktionen und Variablen, und stellt sicher, dass alles für die Ausführung des Programms bereit ist. Aufgrund seiner Rolle ist der dynamische Lader in hohem Maße sicherheitskritisch, da sein Code mit erhöhten Rechten läuft, wenn ein lokaler Benutzer ein Programm mit set-user-ID oder set-group-ID startet.