
WordPress Forminator をスキャンし、CVE-2026-15748 の未認証 RCE を検出します。脆弱なサイトを検出し、フォームをクロールして nonce を抽出し、安全なアップロードテストを実行します。
Forminator プラグインを使用している WordPress インストールを特定し、バージョンに関連する露出を評価するための、Python ベースのセキュリティリサーチおよび脆弱性評価スキャナーです。
教育目的および許可されたテスト専用
このプロジェクトは、自身が所有するシステム、または評価について明示的な許可を得ているシステムに対してのみ実行してください。
CVE-2026-15748 は、WordPress 用の Forminator プラグインに関連する脆弱性です。
このプロジェクトは、セキュリティリサーチおよび許可されたテストのためのスキャナーを提供します。一連のパッシブチェックおよびアプリケーションレベルのチェックを実行し、WordPress の特定、Forminator の検出、可能な場合のインストール済みバージョンの判定、関連ページやフォームの検査、および結果の評価レポートの出力を行います。
このスキャナーは、スキャナーによる結果を悪用可能性の絶対的な証明として扱うことなく、許可された WordPress 環境の露出をセキュリティ研究者が理解する助けとなることを目的としています。
スキャナーは次の一般的なワークフローに従います:
Target
|
v
Normalize URL
|
v
Detect WordPress
|
+---- not detected ----> NOT WORDPRESS
|
v
Crawl relevant pages
|
v
Detect Forminator
|
v
Detect Forminator version
|
v
Compare version
|
v
Inspect forms
|
v
Generate result
| 機能 | 説明 |
|---|---|
| WordPress 検出 | 対象が WordPress を使用しているかどうかを検出します。 |
| Forminator 検出 | Forminator プラグインの指標を検索します。 |
| バージョン検出 | 利用可能なソースからインストールされている Forminator のバージョンを特定しようと試みます。 |
| バージョンチェック | 検出されたバージョンを設定された VULN_MAX 値と比較します。 |
| Web サイトクローリング | さらなる検査のために、関連するページや内部リンクを収集します。 |
| サイトマップ検出 | 一般的な WordPress サイトマップの場所を確認します。 |
| フォーム検出 | 関連する Forminator フォームおよびフォーム要素を探します。 |
| Nonce 検出 | 検出されたフォームデータ内の Forminator nonce を特定しようと試みます。 |
| マルチスレッド | 複数の対象を同時に処理することをサポートします。 |
| リトライ処理 | 設定された制限に従って失敗したリクエストを再試行します。 |
| リクエスト遅延 | リクエスト間に設定可能なランダム遅延を追加します。 |
| 詳細な結果 | 収集した評価結果を詳細な結果ファイルに書き込みます。 |
requestspackagingurllib3必要なパッケージをインストールします:
pip install requests packaging urllib3
または:
python -m pip install requests packaging urllib3
リポジトリをクローンします:
git clone https://github.com/yora1928/cve-2026-15748.git
プロジェクトディレクトリに移動します:
cd cve-2026-15748
依存関係をインストールします:
pip install requests packaging urllib3
Python のインストールを確認します:
python --version
スキャナーの設定はソースコード内で直接定義されています:
TIMEOUT = 15
THREADS = 8
VULN_MAX = "1.56.1"
MAX_RETRIES = 3
DELAY_MIN = 1.0
DELAY_MAX = 2.5
CRAWL_DEPTH = 2
| 変数 | デフォルト | 説明 |
|---|---|---|
TIMEOUT | 15 | HTTPリクエストのタイムアウト。 |
THREADS | 8 | スキャンに使用するワーカースレッド数。 |
VULN_MAX | 1.56.1 | スキャナーのバージョン評価において影響を受けると見なされる最大バージョン。 |
MAX_RETRIES | 3 | 失敗したリクエストの最大再試行回数。 |
DELAY_MIN | 1.0 | 最小リクエスト遅延。 |
DELAY_MAX | 2.5 | 最大リクエスト遅延。 |
CRAWL_DEPTH | 2 | 最大クロール深度。 |
上記の値は、スキャナーの現在のソースコード設定を表しています。
スキャナーは、単一のターゲットURL、または複数のターゲットURLを含むテキストファイルのいずれかを受け付けます。
python cve-2026-15748.py -u https://target.com
-u と --url は1つのターゲットURLを指定します。
単一の許可された環境に対して評価を行う場合にこのモードを使用します。
targets.txt などのファイルを作成します:
https://target1.example
https://target2.example
https://target3.example
次に実行します:
python cve-2026-15748.py -f targets.txt
-f と --file はターゲットリストを指定します。
空でない各行がターゲットとして扱われます。
デフォルト設定では8スレッドを使用します。
例:
python cve-2026-15748.py -f targets.txt -t 10
または:
python cve-2026-15748.py -f targets.txt -t 5
-t はスキャナーが使用するワーカースレッドの数を変更します。
スキャナーはオプションの --upload モードも提供しています:
python cve-2026-15748.py -u https://lab.example.com --upload
複数の許可されたターゲットの場合:
python cve-2026-15748.py -f authorized-targets.txt -t 5 --upload
このモードは、関連する条件が満たされた場合に、Forminator エンドポイントに対して POST/アップロードリクエストを実行できます。
このテストが明示的に許可されているシステムでのみ --upload を使用してください。
| コマンド | 目的 |
|---|---|
-u, --url | 単一のターゲット URL をスキャンします。 |
-f, --file | ファイルから複数のターゲットを読み込みます。 |
-t | スキャンスレッド数を設定します。 |
--upload | 許可されたターゲットに対してアップロードテストモードを有効にします。 |
単一ターゲット:
python cve-2026-15748.py -u https://target.com
複数のターゲット:
python cve-2026-15748.py -f targets.txt
カスタム同時実行数で複数のターゲットを指定:
python cve-2026-15748.py -f targets.txt -t 10
Authorized lab upload test:
python cve-2026-15748.py -u https://lab.example.com --upload
スキャナーは評価中にいくつかの段階を実行します。
後続のチェックが一貫した URL 形式を使用できるよう、リクエストが行われる前にターゲット URL が正規化されます。
スキャナーは以下を含む一般的な WordPress の指標とエンドポイントをチェックします:
/wp-login.php
/wp-json
/xmlrpc.php
/wp-content
また、以下のような指標についてもレスポンスを検索します:
wp-content
wp-includes
WordPress を特定できない場合、スキャナーは次を報告します:
[NOT WORDPRESS]
スキャナは、一般的なパス、サイトマップの場所、およびターゲットから発見された内部リンクからページのリストを構築します。
チェックされるパスの例は次のとおりです:
/contact
/kontak
/hubungi-kami
/form
/forms
/formulir
/upload
/unggah
/submit
/kirim
/gallery
/kontribusi
/daftar
/pendaftaran
/registration
/register
/file-upload
/submit-document
/unggah-berkas
/upload-file
一般的なサイトマップの場所には次のものがあります:
/sitemap.xml
/sitemap_index.xml
/wp-sitemap.xml
クローラーは CRAWL_DEPTH によって制限されます。
スキャナーは次のような Forminator の識別子を検索します:
forminator-form-<ID>
検出されたフォームに対して、以下のような関連要素をチェックします:
type="file"
and:
<select>
以下も取得しようとします:
form_id
nonce
フォームHTMLから。
スキャナは、ターゲットから公開されている情報に基づいてForminatorのバージョンを特定しようと試みます。
ソースの1つは、次のようなアセットパスです:
/wp-content/plugins/forminator/...
バージョンパラメータを指定する場合:
?ver=X.X.X
スキャナーには、以下を検索するフォールバック機能もあります:
Stable tag:
HTML または readme.txt 内。
報告される検出方法には以下が含まれます:
html-source
または:
readme.txt
設定された評価境界は次のとおりです:
1.56.1
検出されたバージョンは VULN_MAX と比較されます。
想定される評価状態には次のものがあります:
VULNERABLE
PATCHED
Forminator が検出されたものの、そのバージョンを特定できない場合、スキャナーは次のように報告できます:
INSTALLED (unknown version)
スキャナによる分類は、対象が悪用可能であるという絶対的な証明ではなく、評価結果として扱うべきです。
主な出力は、おおむね次の構造に従います。
[STATUS] URL VERSION (METHOD) [PAGES] [FORM STATUS] [VULNERABILITY STATUS] [UPLOAD STATUS]
例:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [HAS UPLOAD FORM] [VULNERABLE]
アップロードフォームが検出されない場合:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [VULNERABLE]
FOUNDForminator が検出され、関連情報が正常に収集されました。
NOT FOUNDForminator を検出できませんでした。
例:
[NOT FOUND] https://target.com [17 pages]
NOT WORDPRESS対象はWordPressのインストールとして検出されませんでした。
例:
[NOT WORDPRESS] https://target.com
INSTALLED (unknown version)Forminator はインストールされているようですが、スキャナーはそのバージョンを特定できませんでした。
VULNERABLE検出されたバージョンは、設定された境界値以下です:
1.56.1
PATCHED検出されたバージョンは設定された境界を上回っています:
1.56.1
ターゲットをスキャンした後、ツールは次のような概要を表示します:
========== SUMMARY ==========
VULNERABLE : 10
PATCHED : 5
UNKNOWN VERSION : 3
NOT FOUND : 20
NOT WORDPRESS : 2
TOTAL SCANNED : 40
[+] HAVE UPLOAD FORM: 2
値は現在のスキャン中に収集された結果を表します。
スキャンが完了すると、ツールは以下を作成します:
scan_results_detailed.txt
結果ファイルは次のようなセクションに整理されています:
=== VULNERABLE (with upload form) ===
=== VULNERABLE (no upload form) ===
=== UNKNOWN VERSION (assume vulnerable) ===
例:
=== VULNERABLE (with upload form) ===
https://target.example - v1.56.0 (html-source) - form_data: ...
=== VULNERABLE (no upload form) ===
https://target.example - v1.55.0 (html-source)
=== UNKNOWN VERSION (assume vulnerable) ===
https://target.example
スキャン結果にターゲット情報やその他の機密データが含まれている場合は、公開リポジトリにコミットしないでください。
cve-2026-15748/
|
├── cve-2026-15748.py
├── README.md
├── targets.txt
└── scan_results_detailed.txt
| ファイル | 目的 |
|---|---|
cve-2026-15748.py | メインスキャナーの実装。 |
README.md | プロジェクトのドキュメント。 |
targets.txt | 処理対象のターゲット一覧。 |
scan_results_detailed.txt | 自動生成されるスキャン結果。 |
ソースコードはいくつかの機能領域に整理されています: