
CVE-2026-63030 / CVE-2026-60137 - Scanner de RCE pré-autenticação do WordPress
por @bahartanir (katherinepierce) Fork de ZephrFish/wp2shell-scanner com melhorias adicionais. Pesquisa por Adam Kues (Assetnote) e Mustafa Can İPEKÇİ (nukedx).
Ferramenta de detecção e validação para exposição do núcleo do WordPress ao wp2shell
(CVE-2026-63030 / CVE-2026-60137). Os modos são selecionados com uma flag, e o
alvo é posicional. --scan captura a impressão digital da versão do núcleo e
confirma que a rota REST /batch/v1 está acessível sem enviar um payload de
exploit; os modos --check/--read/--shell/--rce/--root-prereq são a PoC
de validação para uso autorizado em laboratório.
wp2shell.py é um script único, apenas com bibliotecas padrão — sem dependências
externas. Cada execução imprime o banner no stderr antes de executar (permanece
fora do stdout, portanto a saída JSON --scan -j não é afetada).
Exatamente uma flag de modo é obrigatória; o alvo é posicional (uma URL para cada
modo, ou uma lista de hosts para --scan).
wp2shell.py (--scan | --check | --read | --shell | --rce | --root-prereq)
[targets ...] [-f FILE] [-j] [-t THREADS] [--prefix PREFIX]
[--delay DELAY] [--repeats REPEATS] [--preset PRESET] [--expr EXPR]
[--max-len MAX_LEN] [--user USER] [--password PASSWORD] [--cmd CMD]
[-i] [--no-cleanup] [-y] [--sleep SLEEP] [--rounds ROUNDS]
[--route {auto,rest-route,wp-json}] [--proxy PROXY] [--authorized]
[--timeout TIMEOUT]
Original deep dive: https://blog.zsec.uk/wp2shell-code-trace-deep-dive/
nuclei -t wp2shell-exposure.yaml -u https://target
Host único, múltiplos hosts ou um arquivo.
python3 wp2shell.py --scan https://target
python3 wp2shell.py --scan host1 host2 host3
python3 wp2shell.py --scan -f hosts.txt
Opções: -f/--file arquivo de hosts (um por linha), -j/--json saída JSON,
-t/--threads concorrência (padrão 10).
Os modos --check/--read/--shell/--rce/--root-prereq enviam payloads de
exploit ao vivo. Execute-os apenas contra o laboratório localhost incluído, ou
outros sistemas que você possui e que está explicitamente autorizado a testar.
--shell e --rce realizam execução remota de código e são destinados ao
laboratório/alvos autorizados; --rce em um host não loopback requer
--authorized. --root-prereq usa o mesmo plugin de diagnóstico com token para
verificar pré-requisitos shell-to-root, mas não executa uma escalada de
privilégio local.
--shell precisa de uma senha de admin recuperada/quebrada. --rce é a cadeia
pré-autenticação sem credenciais: forja seu próprio administrador através do
SQLi (oEmbed → changeset → parse_request reentrante), então implanta o webshell
— nenhuma senha necessária.
--shell, --rce e --root-prereq solicitam autorização interativa y/N antes
de qualquer payload de execução de código ser enviado (eles abortam em stdin não
interativo/EOF). Passe -y/--yes para pular o prompt para automação contra o
laboratório ou um alvo autorizado.
docker compose -f poc/lab/docker-compose.yml up -d
python3 wp2shell.py --check http://127.0.0.1:8080
python3 wp2shell.py --read http://127.0.0.1:8080 --expr @@version
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' --cmd id
python3 wp2shell.py --shell http://127.0.0.1:8080 --user admin --password 'Summer2026!' -i
python3 wp2shell.py --rce http://127.0.0.1:8080 --cmd id
python3 wp2shell.py --rce http://127.0.0.1:8080 -i
python3 wp2shell.py --root-prereq http://127.0.0.1:8080 --user admin --password 'Summer2026!'
python3 wp2shell.py --lpe http://127.0.0.1:8080
Os diffs de patch usados para fundamentar a PoC estão salvos em poc/diffs/,
com notas de pesquisa em poc/RESEARCH.md. O SQLi é totalmente reconstruível a
partir da correção author__not_in. A cadeia --rce sem credenciais (oEmbed →
changeset → reentrada → criação de admin) reproduz o RCE padrão de fábrica contra
o laboratório incluído; --shell é o caminho alternativo via uma credencial de
admin recuperada/quebrada para upload de plugin autenticado e execução de
comandos.
--lpe)--lpe encadeia o RCE completo de pré-autenticação (SQLi → forja de admin →
webshell) com uma tentativa automatizada de escalada para root. Ele tenta os
seguintes em ordem, parando no primeiro sucesso:
python3 wp2shell.py --lpe http://127.0.0.1:8080
python3 wp2shell.py --lpe http://127.0.0.1:8080 -y # skip auth prompt
python3 wp2shell.py --lpe https://target --authorized # non-loopback
--lpe em um alvo não loopback requer --authorized. No laboratório incluído
(imagem base Ubuntu 22.04 com kernel GameOverlay vulnerável) CVE-2023-2640/32629
é bem-sucedido sem um compilador.
| Flag | Descrição |
|---|
--scan | Verificação não destrutiva de exposição: impressão digital da versão + confirma que a rota REST /batch/v1 está acessível. Nenhum payload de exploit enviado. |
--check | Confirma SQLi cego baseado em tempo com uma sonda diferencial inofensiva. |
--read | Extrai dados via SQLi cego (um preset ou uma expressão escalar SQL bruta). |
--shell | Cadeia RCE autenticada usando uma senha de administrador quebrada/recuperada. |
--rce | RCE pré-autenticação sem credenciais: forja seu próprio administrador através do SQLi, então implanta um webshell auto-limpante. |
--root-prereq | Verificação benigna de pré-requisito shell-to-root; executa apenas diagnósticos, nunca uma escalada de privilégio local. |
--lpe | Cadeia completa: SQLi pré-autenticação → forja de admin → webshell → root. Tenta CVE-2023-2640/32629 (GameOverlay overlayfs), CVE-2023-4911 (Looney Tunables glibc), CVE-2026-31431 (AF_ALG Copy Fail), CVE-2026-23111 (sonda UAF nf_tables), então fallback SUID/sudo/cap. |
| Flag | Aplica-se a | Descrição |
|---|
-f, --file | --scan | Lê hosts de um arquivo (um por linha; comentários # ignorados). |
-j, --json | --scan | Emite resultados como JSON no stdout. |
-t, --threads | --scan | Concorrência de varredura (padrão 10). |
--prefix | --check/--read | Prefixo da tabela do banco (padrão wp_). |
--delay | --check/--read | Segundos de SLEEP injetados para o oráculo de temporização (padrão 0.15). |
--repeats | --check/--read | Mediana sobre N sondas por bit; aumente em links ruidosos (padrão 1). |
--preset | --read | Alvo embutido: version, database, db_user, users, siteurl (padrão users). |
--expr | --read | Expressão escalar SQL bruta para extrair (sobrescreve --preset). |
--max-len | --read | Comprimento máximo da string extraída (padrão 128). |
--user | --shell/--root-prereq | Nome de usuário admin para login (padrão admin). |
--password | --shell/--root-prereq | Senha admin em texto claro (quebre o hash de --read; obrigatório para esses modos). |
--cmd | --shell/--rce | Comando para executar no alvo (padrão id). |
-i, --interactive | --shell/--rce | Loop interativo de comandos web em vez de um único comando. |
--no-cleanup | --shell/--rce | Deixa o plugin/webshell implantado no lugar (apenas laboratório). |
-y, --yes | --shell/--rce/--root-prereq | Pula o prompt de autorização interativo (para automação). |
--sleep | --rce | Segundos de SLEEP injetados para detecção de SQLi pré-autenticação (padrão 4). |
--rounds | --rce | Mediana sobre N sondas para detecção de --rce (padrão 3). |
--route | --rce | Forma da rota batch: auto, rest-route ou wp-json (padrão auto). |
--proxy | --rce | Roteia requisições através de um proxy HTTP, ex. Burp em http://127.0.0.1:8080. |
--authorized | --rce | Afirma autorização para um alvo --rce não loopback (obrigatório para hosts remotos). |
--timeout | all | Timeout por requisição em segundos (padrão 15). |
| CVE | Afetado | Técnica | Compilador |
|---|
| CVE-2023-2640 / CVE-2023-32629 | Ubuntu 22.04 / 23.04, kernel < 6.3.3 com driver GameOverlay | Montagem overlayfs sem privilégios no namespace do usuário preserva chmod +s no diretório superior | Nenhum (shell puro) |
| CVE-2023-4911 | glibc 2.34–2.38 (Ubuntu 22.04, Debian 12, Fedora 37–38) | Estouro de pilha GLIBC_TUNABLES em _dl_parse_tunables() → injeção LD_PRELOAD em execução SUID | gcc obrigatório |
| CVE-2026-31431 | Kernel Linux com algif_aead + authencesn(hmac(sha256),cbc(aes)) | Otimização in-place AF_ALG AEAD + splice() escreve 4 bytes no cache de página do binário SUID; sonda de pré-requisito — links para AliHzSec/CVE-2026-31431 | gcc obrigatório |
| CVE-2026-23111 | Ubuntu 22.04 / 24.04, Debian Bookworm / Trixie | Verificação invertida UAF nf_tables em nft_map_catchall_activate() → underflow de chain->use → cadeia liberada; sonda de pré-requisito — links para Baba01hacker666/CVE-2026-23111 | gcc obrigatório |
| Fallback | Qualquer | Abuso de SUID GTFOBins + sudo NOPASSWD | Nenhum |