
CVE-2026-92229(Forminator WordPressプラグイン バージョン1.57.2以下における未認証の任意ショートコード実行脆弱性)のためのPython 3 PoCスキャナーおよびエクスプロイト。
Forminator (WPMU DEV) における CVE-2026-92229 の Python 3 製 PoC スキャナ/エクスプロイト。
| プラグイン | forminator |
| 影響を受けるバージョン | ≤ 1.57.2 |
| 修正バージョン | 1.57.3+ |
| CVSS | 9.1 (Critical) |
| 認証 | 未認証 |
| ベクター | POST パラメータ current_url (クイズ AJAX) |
| CWE | CWE-94 (コードインジェクション) |
| クレジット | Kuba (Wordfence) |
脆弱なバージョンでは、ユーザーが指定した current_url がクイズ結果の HTML (例: ソーシャル共有属性) に反映され、レスポンスバッファが WordPress の do_shortcode() で処理されます。未認証の攻撃者は、admin-ajax.php 経由でクイズを送信し、悪意のある current_url に任意のショートコードを埋め込むことができます。
主要な AJAX アクション:
forminator_submit_form_quizzesforminator_submit_preview_form_quizzes (プレビュー; --preview)1.57.3 で修正され、ショートコードの実行は HTML バッファ全体ではなく、意図されたテキストフィールドに限定されるようになりました。
pip install -r requirements.txtpip install -r requirements.txt
# Detect plugin, version, public Forminator modules (quiz answers when parseable)
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# Exploit (auto nonce + quiz answers when possible)
python poc.py -u https://target.example --mode exploit \
--page-url /quiz/ --form-id 42 \
--shortcode "PROBE"
# Preview submit (no stored entry, same code path)
python poc.py -u https://target.example --mode exploit --preview \
--page-url /quiz/ --form-id 42
# Manual quiz answers if HTML parsing fails
python poc.py -u https://target.example --mode exploit \
--form-id 42 --answers "2051:7608,2052:7610"
| オプション | 説明 |
|---|---|
-u, --url | 単一ターゲットのベース URL |
--list | 1 行に 1 つの URL を記載したファイル |
--mode | check (デフォルト) または exploit |
--page-url | フォームを含むページパスまたは URL |
--form-id | Forminator モジュール ID |
--form-type | quizzes、custom-forms、または poll |
--answers | クイズの回答を question_id:answer_id,... 形式で指定 |
--shortcode | ショートコードペイロード (current_url 内で [caption]…[/caption] にラップされる) |
--preview | プレビュー AJAX アクションを使用 |
--threads, -j | 一括スキャンの並列度 (デフォルト 20) |
--output | JSONL 結果 (デフォルト cve_2026_92229_results.jsonl) |
--vuln-list | check のヒット用テキストファイル (デフォルト hits.txt) |
--candidates-list | 悪用可能な check の JSONL メタデータ (デフォルト candidates.jsonl) |
--quiet | 一括実行時の進捗ノイズを低減 |
| ファイル | 内容 |
|---|---|
cve_2026_92229_results.jsonl | ターゲットごとの JSON (status、version、modules、…) |
hits.txt | exploitable_candidate: true のベース URL |
candidates.jsonl | ヒットの詳細: form_id、page_url、form_type |
status の値| ステータス | 意味 |
|---|---|
candidate | 脆弱なバージョン + 回答が解析されたクイズ |
form_no_quiz_answers | フォームは見つかったが、クイズの回答が自動解析されなかった |
plugin_no_public_form | プラグインは存在するが、公開モジュールが検出されなかった |
patched | バージョン ≥ 1.57.3 (またはそれ以降のメジャー) |
no_plugin | Forminator が検出されなかった |
answers[qid] が HTML から解析できる場合にのみ exploitable_candidate をマークします (多くのサイトは JS レンダリングのクイズを使用 → --answers または手動エクスプロイトを使用)。[caption] などの無害なショートコードでプローブしてください)。.
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
ローカルの一括スキャンリスト (例: list.txt、FOFA エクスポート、*.jsonl 結果) は .gitignore に記載されており、コミットすべきではありません。
許可されたセキュリティテストのみを目的としています。適用される法律およびプログラム規則の遵守はあなたの責任です。