Uma variante totalmente armada de red-team (segurança ofensiva) do wp2shell, construída para testes de penetração autorizados e fins educacionais.
Uma prova de conceito autocontida para a injeção SQL cega não autenticada acessível por meio do endpoint de batch da API REST do WordPress (/wp-json/batch/v1). É uma implementação independente construída a partir da mecânica da vulnerabilidade publicada.
Comunicado Oficial: WordPress Security Release | CVE-2026-63030
Autor: J4ck3LSyN
Autoridades: CFSD, NFK & C4b1NKr3W
Nota: Não incluí este pacote com o implante de persistência armamentizado
r00t.pyassociado por razões legais óbvias. Para obtê-lo, você pode me enviar uma mensagem direta no x
[!WARNING]
Este código é fornecido NO ESTADO EM QUE SE ENCONTRA ("AS IS") apenas para fins educacionais e de pesquisa. Não use este PoC em sistemas de produção, ambientes compartilhados ou alvos não autorizados.
- Executar ou hospedar este código pode acionar detecções de antivírus, alertas de monitoramento de segurança ou consequências legais se for mal utilizado.
- Os autores e mantenedores do repositório não assumem nenhuma responsabilidade por danos, uso indevido ou atividades ilegais resultantes deste código.
- Use exclusivamente em ambientes de laboratório isolados e com autorização adequada.
poc.py - CLI principal da prova de conceito (modos check, read, shell)val.py - Validador passivo leve de vulnerabilidade (val.py <target>)MITIGATIONS.md - Guia abrangente de mitigações e endurecimentoLETHALITY.html - Matriz visual de letalidade de capacidades (heatmap + kill chain)LICENSE - Licença MITr00t.py:redacted - Orquestrador principal do implante (integra tudo)modules/ - Módulos de implante pós-exploraçãoexploit.py - Lógica central de exploração (primitiva SQLi + RCE)privesc.py:redacted - Verificações de escalonamento local de privilégios (DirtyCOW, sudo, capabilities, etc.)lpe_byond.py:redacted - LPE avançado usando técnicas BYOVD + eBPF (controlado por operador)recon.py:redacted - Perfilamento e enumeração do hostpersistence.py:redacted - Mecanismos de persistência (systemd, cron, chaves SSH)c2.py:redacted - Beacon C2 criptografado (HTTPS + DoH)exfil.py:redacted - Coleta de credenciais e exfiltração de dadosstealth.py:redacted - Anti-análise, detecção de sandbox e ofuscação| Branch | Versões afetadas | Corrigido em |
|---|---|---|
| 6.9.x | 6.9.0 - 6.9.4 | 6.9.5 |
| 7.0.x | 7.0.0 - 7.0.1 | 7.0.2 |
Consulte os lançamentos oficiais de segurança do WordPress para obter detalhes.
O endpoint de batch despacha várias sub-requisições em uma única chamada, validando e verificando permissões de cada uma de forma independente. Quando o caminho de uma sub-requisição falha no wp_parse_url(), ele é adicionado ao array de validação, mas não ao array de handlers correspondentes. Os dois arrays ficam dessincronizados, e uma sub-requisição posterior é despachada sob o handler de uma sub-requisição diferente. Isso é a confusão de rota.
Este PoC aninha a primitiva duas vezes:
POST /wp/v2/posts que carrega um corpo requests é despachada sob o próprio handler do batch. Tendo sido validada como uma requisição de posts, sua lista interna requests nunca é revalidada contra o schema do batch, então as sub-requisições internas podem usar GET (bypass da allow-list de métodos).GET /wp/v2/users carregando author_exclude=... é despachada sob posts get_items(). O schema da coleção de usuários não possui o parâmetro author_exclude, então o valor passa pela validação sem alterações. posts get_items() mapeia author_exclude para a query var author__not_in do WP_Query, que builds vulneráveis interpolam no SQL como string bruta.O sink final é uma injeção SQL cega booleana / baseada em tempo, pré-autenticação:
... post_author NOT IN (<value>) ...
Um valor de 0) <sql>-- - fecha a lista IN() e acrescenta SQL arbitrário.
O PoC é fail-closed (falha segura). Três portões de execução impedem execução acidental ou fora do escopo. Todos são aplicados em modules/exploit.py; o CLI em poc.py apenas os repassa.
| Flag | Escopo | Efeito quando ausente |
|---|---|---|
--authorized | Todo o I/O de rede | AuthorizationError antes de qualquer envio |
--noop | Todos os subcomandos | Constrói/imprime payloads; sem contato com a rede |
--max-requests | BatchClient | Orçamento rígido de requisições |
--r00t | subcomando shell | Capacidades de RCE pós-autenticação retidas |
AuthorizationError é levantado em BatchClient._ensure_authorized(), AdminSession._ensure_authorized() e AdminSession._ensure_r00t().BatchClient._count() aplica --max-requests antes de o socket ser aberto.--r00t é o separador de capacidades: um build distribuído sem ele não pode implantar nem executar um webshell.Tratamento de credenciais para shell: nome de usuário/senha de administrador resolvidos a partir de --user / --password, ou variáveis de ambiente / um arquivo seguro.
git clone https://github.com/J4ck3LSyN-Gen2/CVE-2026-63030-wp2r00t.git
cd CVE-2026-63030-wp2r00t
python3 -m py_compile modules/exploit.py poc.py # basic sanity check
Requisitos: Python 3.11+, apenas biblioteca padrão (sem dependências pip).
python3 poc.py <command> <url> [flags]
Flags comuns (todos os subcomandos):
--authorized Assert you own / are authorized to test <url>. Required to send.
--noop Build/validate payloads without sending (no network contact).
--max-requests N Hard cap on requests to the target.
--rest-route Use /?rest_route=/batch/v1 instead of /wp-json/batch/v1.
--timeout FLOAT Request timeout (default 30).
--proxy URL HTTP(S) proxy.
--insecure Disable TLS certificate verification.
check - Confirmar a vulnerabilidade (não destrutivo)read - Extração SQL cegashell - Auxiliar de webshell pós-autenticação (requer --r00t)validate - Identificador passivoReferência Rápida
| Objetivo | Comando |
|---|---|
| Visualizar payloads de prova | python3 poc.py check <url> --noop |
| Confirmar vulnerabilidade | python3 poc.py check <url> --authorized |
| Prova ativa por tempo | ... check <url> --authorized --confirm-sqli |
| Visualizar payloads de SQLi | python3 poc.py read <url> --noop --query "SELECT @@version" |
| Extrair dados | python3 poc.py read <url> --authorized --query "SELECT @@version" |
| Visualizar artefato do webshell | python3 poc.py shell <url> --noop --r00t --cmd "id" |
| Implantar + executar (autorizado) | python3 poc.py shell <url> --authorized --r00t --user admin --cmd "id" |
| Scan passivo | python3 poc.py validate <url> --authorized |
A documentação completa dos comandos está disponível nas seções detalhadas originais (ou execute python3 poc.py --help).
jitter) e valores de SLEEP variados por amostra
neutralizam análises comportamentais de WAF/NDR com cadência/delta fixos.Os módulos de pós-exploração (
recon,privesc,exfil,persistence,stealth,c2,lpe_byond) e or00t.pyformam uma cadeia de implante separada que não faz parte do PoC voltado para a rede e é deliberadamente excluída dos builds compartilhados. Eles estão fora do escopo deste documento.
Este projeto está licenciado sob a Licença MIT. Consulte LICENSE para obter detalhes.
Aviso legal: Use somente em sistemas que você possua ou para os quais tenha autorização explícita para testar. Os autores não assumem nenhuma responsabilidade por uso indevido.