
PoC autenticado para CVE-2026-0911: testa upload de arquivos fraco e comportamento de arquivos órfãos no endpoint de importação de módulos do plugin Hustle do WordPress, com varredura de múltiplos alvos e personalização de payload.
Ferramenta de auxílio a pesquisa / pentest que testa o comportamento de upload por meio do endpoint de importação de módulo que requer autenticação, no âmbito do CVE-2026-0911 para o plugin WordPress Hustle (wordpress-popup, WPMU DEV).
O script CVE-2026-0911.py neste repositório ou conjunto de arquivos deve ser usado somente em sistemas que você possui ou que você testa com autorização por escrito.
Nas versões afetadas (Wordfence/NVD: **7.8.9.2 e anteriores), a chamada wp_handle_upload() dentro de action_import_module() é feita com test_type => false, o que deixa a validação do tipo de arquivo fraca; mesmo que a validação JSON após a importação falhe, o arquivo enviado pode (arquivo "órfão"). Se o servidor executar PHP em , isso pode fazer parte de uma cadeia que, na prática, leva à execução remota de código. Nas versões corrigidas, vem e a restrição com temporário.
wp-content/uploadstest_type => true.jsonupload_mimesConsulte o registro NVD e as referências do Wordfence para um resumo técnico detalhado.
from __future__ import annotations)Exemplo de instalação:
pip install requests
Pelo menos um alvo (-u ou -l) e uma sessão WordPress válida (--cookie ou --cookie-file) são obrigatórios.
python CVE-2026-0911.py -u "https://exemplo.com" --cookie "wordpress_logged_in_...=...; ..."
Ajuda:
python CVE-2026-0911.py --help
| Parâmetro | Descrição |
|---|---|
-u, --url | URL raiz de um único alvo (ex.: https://site.com) |
-l, --list | Arquivo com uma URL por linha (comentários com #) |
--cookie | String de cookie copiada do navegador |
--cookie-file | Arquivo contendo o cookie em uma única linha |
--nonce | Nonce WordPress manual para hustle_single_action (em vez da captura automática) |
--admin-page | Valor de admin.php?page= do qual o nonce será extraído (padrão: hustle_popup_listing) |
--module-id | moduleId do POST (padrão 0: módulo inválido → fluxo de importação) |
--module-type | popup, slidein, embedded, social_sharing |
--module-mode | Ex.: informational, optin |
--remote-name | Nome do arquivo enviado no multipart (padrão: probe_rce.php) |
--payload-file | Lê o conteúdo a ser enviado de um arquivo (substitui --uploader e a sonda padrão) |
--uploader | Usa o corpo do mini uploader PHP embutido |
--workers | Número de threads simultâneas no modo lista (padrão: 8) |
--timeout | Tempo limite da solicitação em segundos (padrão: 25) |
--verify-ssl | Ativa a verificação TLS (padrão: desativada) |
--debug | Saída de depuração adicional |
--quiet |
admin-ajax.php, possíveis URLs candidatas. Em alvos múltiplos, as linhas podem parecer misturadas de tempos em tempos, pois vêm das threads; cada linha contém o domínio do alvo.--quiet, esses detalhes são suprimidos.-o (append), gravados em disco com flush / fsync quando possível. Nome de arquivo padrão: cve-2026-0911-hits.txt (o caminho absoluto no diretório de trabalho é resumido).Site único, verificação TLS, depuração:
python CVE-2026-0911.py -u "https://lab.local" --cookie-file cookie.txt --verify-ssl --debug
Varredura de lista, 16 workers, saída personalizada:
python CVE-2026-0911.py -l alvos.txt --cookie "..." --workers 16 -o resultados.txt
Corpo do uploader embutido e nome de arquivo remoto personalizado:
python CVE-2026-0911.py -u "https://lab.local" --cookie "..." --uploader --remote-name test.php
single_module_action_nonce dentro de optinVars.moduleId=0, o plugin pode retornar erro devido ao limite de módulos antes do upload; nesse caso, o arquivo não é gravado.wp-content/uploads/YYYY/MM/; se o WordPress renomear o arquivo, o caminho real pode ser diferente.--cookie não funciona em domínios diferentes; em testes de vários sites, é necessária uma sessão adequada para cada ambiente.0; caso contrário, um código diferente de zero (retorno do main interno do script).Ctrl+C: 130.Esta ferramenta destina-se apenas a testes de segurança legais, educação e uso defensivo. O uso em sistemas não autorizados é ilegal e pode levar a penalidades severas. Autores e colaboradores não podem ser responsabilizados por uso indevido.
| Desativa logs de domínio/etapas; foco no resumo |
-o, --output | Arquivo ao qual as linhas de "hit" bem-sucedidas são anexadas |