
CVE-2026-0911 の認証済み PoC: WordPress Hustle プラグインのモジュールインポートエンドポイントにおける脆弱なファイルアップロードと孤立ファイルの動作をテストし、マルチターゲットスキャンとペイロードのカスタマイズに対応しています。
WordPress プラグイン Hustle (wordpress-popup、WPMU DEV) の CVE-2026-0911 に関する、認証を必要とする モジュールインポート エンドポイント経由のアップロード動作をテストする 調査 / ペンテスト支援 ツールです。
このリポジトリまたはファイルセット内の CVE-2026-0911.py スクリプトは、所有している、または書面による許可を得てテストしているシステムでのみ使用してください。
影響を受けるバージョン(Wordfence/NVD: 7.8.9.2 以前)では、action_import_module() 内の wp_handle_upload() 呼び出しが test_type => false で実行されるため、ファイルタイプの検証が不十分になります。インポート後の JSON 検証が失敗しても、アップロードされたファイルは削除されない(「孤児」ファイル)可能性があります。サーバーが wp-content/uploads 配下で PHP を実行している場合、これは実際にはリモートコード実行につながるチェーンの一部となり得ます。パッチ適用済みバージョンでは test_type => true と一時的な による 制限が導入されています。
upload_mimes.json詳細な技術概要については、NVD レコードと Wordfence の参照情報を参照してください。
from __future__ import annotations と互換性あり)インストール例:
pip install requests
少なくとも 1 つのターゲット(-u または -l)と有効な WordPress セッション(--cookie または --cookie-file)が必須です。
python CVE-2026-0911.py -u "https://ornek.com" --cookie "wordpress_logged_in_...=...; ..."
ヘルプ:
python CVE-2026-0911.py --help
| パラメータ | 説明 |
|---|---|
-u, --url | 単一ターゲットのルート URL(例: https://site.com) |
-l, --list | 1 行に 1 URL を含むファイル(# でコメント) |
--cookie | ブラウザからコピーしたクッキー文字列 |
--cookie-file | クッキーを 1 行で保持するファイル |
--nonce | hustle_single_action 用の手動 WordPress nonce(自動取得の代わり) |
--admin-page | nonce を取得する admin.php?page= の値(デフォルト: hustle_popup_listing) |
--module-id | POST の moduleId(デフォルト 0: 無効なモジュール → インポートフロー) |
--module-type | popup、slidein、embedded、social_sharing |
--module-mode | 例: informational、optin |
--remote-name | multipart で送信するファイル名(デフォルト: probe_rce.php) |
--payload-file | アップロードする内容をファイルから読み込む(--uploader とデフォルトのプローブを上書き) |
--uploader | 組み込みのミニ PHP フォームアップローダー本体を使用 |
--workers | リストモードでの同時スレッド数(デフォルト: 8) |
--timeout | リクエストタイムアウト秒数(デフォルト: 25) |
--verify-ssl | TLS 検証を有効化(デフォルト: 無効) |
--debug | 追加のデバッグ出力 |
--quiet | ドメイン/ステップログを無効化。サマリー重視 |
-o, --output | 成功した「ヒット」行を追記するファイル |
admin-ajax.php POST サマリー、候補 URL。複数ターゲットの場合、行はスレッドから出力されるため、時折混在して見えることがあります。各行にはターゲットのドメイン名が含まれます。--quiet でこれらの詳細は抑制されます。-o ファイルへ追記(append)され、flush / 可能であれば fsync でディスクに書き込まれます。デフォルトのファイル名: cve-2026-0911-hits.txt(作業ディレクトリ内の絶対パスが要約されます)。単一サイト、TLS 検証あり、デバッグ:
python CVE-2026-0911.py -u "https://lab.local" --cookie-file cookie.txt --verify-ssl --debug
リストスキャン、16 ワーカー、カスタム出力:
python CVE-2026-0911.py -l hedefler.txt --cookie "..." --workers 16 -o sonuclar.txt
組み込みアップローダー本体とカスタムリモートファイル名:
python CVE-2026-0911.py -u "https://lab.local" --cookie "..." --uploader --remote-name test.php
optinVars 内の single_module_action_nonce フィールドから読み取られます。moduleId=0 のパスでは、プラグインがアップロード前にモジュール制限によりエラーを返す場合があります。この場合、ファイルは書き込まれません。wp-content/uploads/YYYY/MM/ の想定に基づいて生成されます。WordPress がファイルをリネームした場合、実際のパスは異なる可能性があります。--cookie は異なるドメインでは機能しません。複数サイトのテストでは、各環境に適したセッションが必要です。0、ない場合は 0 以外のコード(スクリプト内の main の戻り値)。Ctrl+C による中断: 130。このツールは合法的なセキュリティテスト、教育、および防御目的でのみ使用してください。許可のないシステムでの使用は違法であり、重大な罰則につながる可能性があります。著者および貢献者は悪用について責任を負いません。