
Pack de preuve de concept et de divulgation pour CVE-2026-87902, une inclusion de fichier local non authentifiée dans WordPress Core via locate_template(), avec un laboratoire en boucle locale et des conseils de correctif.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87902
WordPress — WordPress Core 7.1.1 — WordPress
WordPress Core est vulnérable à une inclusion locale de fichier via la fonction locate_template() dans diverses versions jusqu'à 7.1.1 inclus.
| CVE | CVE-2026-87902 · CVE.org |
| CWE | CWE-98 |
| CVSS | Élevé : 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produit | WordPress Core |
| Affecté | toutes les versions jusqu'à 7.1.1 (inclus) |
| Corrigé | 7.1.2 et ultérieures |
| Auth | non authentifié (voir la source map) |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 uniquement · pack de divulgation fournisseur/client, pas un scanner |
wp-includes/template.php get_page_template + locate_template sur 7.1.1. Correctif 7.1.2 _wp_is_template_path_allowed et validate_file sur pagename décodé.
GET/?page_id={id}&pagename=templates%252F%252e%252e%252F%252e%252e%252F%252e%252e%252Fuploads%252Fghsa7hp8-witnessGET /?page_id=<page publiée>&pagename=<templates/../../../uploads/ghsa7hp8-witness doublement encodé>WP_Query parse_query is_page depuis page_id; get_posts remplace WHERE par ID=page_idget_page_template urldecode pagename puis page-{$pagename}.phplocate_template file_exists(stylesheet_path + '/' + template_name) sans confinementtemplate-loader realpath + includeLe corps d'une réponse 200 non authentifiée contient GHSA7HP8-WITNESS et wp_version=7.1.1. Le contrôle GET /?page_id=N ne le contient pas.
À faire en premier : Mettre à jour WordPress Core vers 7.1.2 ou une version ultérieure.
Vérifier après la mise à niveau
CVE-2026-87902-Abraxas-Labs.py contre la version corrigée : le témoin mappé ne doit pas apparaître.Si vous ne pouvez pas mettre à jour immédiatement
Cibler uniquement http://127.0.0.1:8088 (ou le loopback que vous avez lié). Ne pointez pas ce script vers Internet.
python3 CVE-2026-87902-Abraxas-Labs.py
Le succès correspond au témoin ci-dessus dans le corps de la réponse. Un HTML 200 générique ne l'est pas.
Pile loopback utilisée pour la reproduction. Images officielles sauf si un Dockerfile dans ce dossier compile depuis les sources.
cd lab
docker compose up --force-recreate
Liez l'arborescence du produit vulnérable à côté de Compose si le YAML monte un répertoire local (zip du plugin / tag source issu de la table des versions). Ne publiez rien d'autre que 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.
Ce pack de divulgation est sous licence GNU Affero General Public License v3.0. Voir LICENSE.
Ce pack est destiné au fournisseur, au propriétaire du site et aux labs autorisés. Le script communique avec 127.0.0.1. L'utiliser contre des systèmes que vous ne possédez pas n'est pas autorisé par Abraxas Labs. Aucune garantie.