Console de exploração com GUI em Tkinter para CVE-2026-87902: identifica WordPress, confirma LFI não autenticado via travessia de pagename, escala para RCE através de uma cadeia de gadgets PEAR e implanta um gerenciador de arquivos.
WordPress Core get_page_template() — LFI Não Autenticado → Gadget PEAR → RCE
Uma GUI dark-neon construída sobre a lógica de MRdark-ops/CVE-2026-87902.
Uma GUI Tkinter moderna (apenas biblioteca padrão, sem dependências de terceiros) para
CVE-2026-87902 — uma Inclusão Local de Arquivo não autenticada no núcleo do WordPress através do
parâmetro pagename de get_page_template(), escalada para Execução Remota de Código
através de uma cadeia de gadgets PEAR (pearcmd.php + config-create).
4.7.0 – 7.1.16.8.10, 7.0.6, 7.1.27hp8-65ch-5whpcheck-only confirma a LFI sem executar nadapearcmd.php (Linux + XAMPP/Windows) em profundidades 1–19, grava PHP via config-createfm_<hex>.php no diretório de drop configurado assim que a RCE é bem-sucedidapip install necessário — biblioteca padrão pura
(tkinter, urllib, ssl, socket, gzip, zlib, threading, queue, ...)Se o Tkinter estiver ausente no seu sistema (este é um pacote do SO, não um pacote pip):
| Plataforma | Comando |
|---|---|
| Debian / Ubuntu | sudo apt install python3-tk |
| Fedora / RHEL | sudo dnf install python3-tkinter |
| Arch Linux | sudo pacman -S tk |
| macOS (Homebrew) | brew install python-tk |
| Windows | Incluído no instalador oficial do Python |
git clone https://github.com/tonydelouvre/CVE-2026-87902.git
cd CVE-2026-87902
python3 xwp_gui.py
Atalhos de teclado:
| Tecla | Ação |
|---|---|
Ctrl+Enter | Iniciar scan |
Esc | Parar scan |
SINGLE (uma URL) ou MASS, depois BROWSE LIST um arquivo .txt
contendo uma URL por linha.exploit -> RCE e deploy file manager para a cadeia completa, ou
check-only para uma verificação segura.oracle, depths, segments, probe, threads, timeout, proxy.| Campo | Padrão | Descrição |
|---|---|---|
target url | – | URL base do alvo (modo single) |
target list | – | Arquivo de URLs (modo mass) |
command | id | Comando executado após obter RCE |
drop dir | /tmp | Diretório onde o File Manager é gravado |
oracle | wp-links-opml | Arquivo core abusado como oráculo LFI |
depths | 4,3,5,6,7 | Profundidades de travessia ../ a tentar |
segments | templates,templates/page-templates,page-templates | Diretórios page-* do tema |
probe | 12 | Número de valores de page_id a sondar |
threads | 10 | Workers paralelos (máx. 50) |
timeout | 12.0 | Timeout por requisição em segundos |
max time | 60.0 | Orçamento de tempo por alvo em segundos |
proxy | – | http://host:port |
build_pagename() produz segment + %252f + N× %252e%252e%252f + alvo,
aplicando dupla codificação de URL:
/?page_id=<N>&pagename=templates%252f%252e%252e%252f...%252fwp-links-opml
| Fase | Módulo | Ação |
|---|---|---|
| 1. Fingerprint | Fingerprinter | Detecta WordPress + versão (generator, ?ver=, wp-links-opml.php) e tema |
| 2. Pré-condição | PreconditionChecker | Localiza o diretório page-* do tema usado como segmento de travessia |
| 3. Descoberta | PageDiscoverer | Coleta valores de page_id via REST API, sitemaps, shortlinks, classes page-id- |
| 4. LFI | TraversalExploiter | Requisita ?page_id=N&pagename=<caminho com dupla codificação> e procura pelo oráculo <opml version= |
| 5. RCE | RCEEscalator | Localiza um gadget pearcmd.php na profundidade 1–19, grava PHP via pear +config-create+, executa o comando |
| 6. Pós-exploração | shell.php | Implanta o File Manager (fm_<hex>.php) no diretório de drop |
Atalhos de versão: se o fingerprint reportar patched ou out_of_range, o alvo é
ignorado imediatamente para economizar tempo.
A aba RESULTS mostra as colunas target, verdict, version, lfi, rce, shell.
Linhas classificadas como VULNERABLE são destacadas em ciano; linhas que obtiveram RCE ficam magenta.
EXPORT grava tudo em CSV:
target,verdict,version,lfi,rce,shell,detail
http://target.local,VULNERABLE,6.4,templates/../../ d=4 POST,uid=33(www-data),http://target.local/?page_id=2&pagename=...,
Para administradores de sistemas:
7.1.2 ou posterior (backports: 6.8.10, 7.0.6, 7.1.2).pagename contenha ../ ou %2e%2e.register_argc_argv no php.ini — isso quebra a cadeia de gadgets do PEAR.pearcmd.php se o PEAR não for necessário.; php.ini
register_argc_argv = Off