
Prueba de concepto y paquete de divulgación para CVE-2026-87902, una inclusión de archivos locales no autenticada en WordPress Core a través de locate_template(), con un laboratorio de loopback y guía de parches.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87902
WordPress — WordPress Core 7.1.1 — WordPress
WordPress Core es vulnerable a Inclusión Local de Archivos (Local File Inclusion) a través de la función locate_template() en varias versiones hasta la 7.1.1, inclusive.
| 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 |
| Producto | WordPress Core |
| Afectado | todas las versiones hasta la 7.1.1 (inclusive) |
| Parcheado | 7.1.2 y posteriores |
| Autenticación | no autenticado (ver mapa de origen) |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 · paquete de divulgación para el proveedor/cliente, no es un escáner |
wp-includes/template.php get_page_template + locate_template en 7.1.1. Parche 7.1.2 _wp_is_template_path_allowed y validate_file sobre 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 desde page_id; get_posts reemplaza WHERE con ID=page_idget_page_template urldecode pagename luego page-{$pagename}.phplocate_template file_exists(stylesheet_path + '/' + template_name) sin jaulatemplate-loader realpath + includeEl cuerpo de una respuesta 200 no autenticada contiene GHSA7HP8-WITNESS y wp_version=7.1.1. El control GET /?page_id=N no lo contiene.
Haga esto primero: Actualice WordPress Core a 7.1.2 o posterior.
Verificar después de la actualización
CVE-2026-87902-Abraxas-Labs.py contra la compilación parcheada: el testigo mapeado no debe aparecer.Si no puede actualizar de inmediato
Apunte únicamente a http://127.0.0.1:8088 (o al loopback que haya enlazado). No apunte este script a internet.
python3 CVE-2026-87902-Abraxas-Labs.py
El éxito es el testigo anterior en el cuerpo de la respuesta. Un HTML 200 genérico no lo es.
Pila de loopback usada para reproducir. Imágenes oficiales a menos que un Dockerfile en esta carpeta compile desde el código fuente.
cd lab
docker compose up --force-recreate
Enlace el árbol del producto vulnerable junto a Compose si el YAML monta un directorio local (zip del plugin / etiqueta de código fuente de la tabla de versiones). No publique nada excepto 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 paquete de divulgación está licenciado bajo la GNU Affero General Public License v3.0. Ver LICENSE.
Este paquete es para el proveedor, el propietario del sitio y laboratorios autorizados. El script se comunica con 127.0.0.1. Usarlo contra sistemas que no posee no está autorizado por Abraxas Labs. Sin garantía.