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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2026-32475-elementor-pro-lab — A/B Dockerラボ + CVE-2026-32475(Elementor Pro Formsの認証なし任意ファイルアップロード → 検証/移動ループの不整合によるRCE)のPoC | Kitploit
ツール/GitHubGitHub/dinosn/cve-2026-32475-elementor-pro-lab
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト学習と教育ラボと実践
GitHubdinosn/cve-2026-32475-elementor-pro-lab

cve-2026-32475-elementor-pro-lab

A/B Dockerラボ + CVE-2026-32475(Elementor Pro Formsの認証なし任意ファイルアップロード → 検証/移動ループの不整合によるRCE)のPoC

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

人気

すべて見る →

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

すべてのツールを探索

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

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

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

CVE-2026-32475(CVSS 9.x、Patchstack 報告、Elementor Pro Forms の File Upload フィールド、影響を受けるバージョン ≤ 4.2.1、4.2.2 で 2026-08-19 に修正、Tin Pham / TF1T 氏による報告)を再現する A/B Docker ラボ。認証なし、ユーザー操作なし。

認可されたテスト/教育目的のみ。 このラボは使い捨ての Docker コンテナ内で完全に 127.0.0.1 上で動作します。明示的にテストを許可されていないシステムに PoC を向けないでください。build.sh は公開 GPL ミラーから Elementor Pro のソースを取得します。このリポジトリにはプレミアムコードは再配布されていません。

根本原因 — 検証/移動ループの不整合

modules/forms/fields/upload.php。2 つのループが同じ再形成済みの $_FILES['form_fields'][$id] を反復処理しますが、空の部分(UPLOAD_ERR_NO_FILE)の扱いが異なります:

root@kitploit:~
// validation()  — 行 ~269
foreach ( $_FILES['form_fields'][ $id ] as $index => $file ) {
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        return;                         // <-- このフィールドの残りの検証をすべて放棄
    }
    ...
    if ( ! $this->is_file_type_valid( $field, $file ) ) {           // 拡張子の許可/拒否リスト
        $ajax_handler->add_error( $id, 'This file type is not allowed.' );
    }
}

// process_field() — 行 ~418
foreach ( $_FILES['form_fields'][ $id ] as $index => $file ) {
    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
        continue;                       // <-- 空の部分のみスキップし、処理を継続
    }
    $filename  = uniqid() . '.' . pathinfo( $file['name'], PATHINFO_EXTENSION ); // 攻撃者の拡張子、再チェックなし
    move_uploaded_file( $file['tmp_name'], trailingslashit( $uploads_dir ) . $filename );
}

1 つの任意アップロードフィールドに2 つの部分(最初に空、次に PHP ペイロード)を送信します。validation() は空の部分に到達して .php をチェックする前に return します。process_field() は空の部分を continue でスキップし、.php を wp-content/uploads/elementor/forms/<uniqid()>.php に移動します。get_blacklist_file_ext() のブロックリスト(php,phtml,pht,shtml,…)は validation() 内でのみ実行されるため、完全にバイパスされます。

完全に認証なし:wp_ajax_nopriv_elementor_pro_forms_send_form(ajax-handler.php:295)。

書き込みだけでなく RCE である理由

get_ensure_upload_dir() は forms ディレクトリに Options -Indexes + Header set Content-Disposition attachment のみを含む .htaccess を配置します。これはブラウザのダウンロードのヒントです — Apache + mod_php では .php は依然としてサーバーサイドで実行されます。攻撃者(curl)はダウンロードヘッダー付きでコマンド出力を受け取るだけです。forms モジュールには**unlink によるクリーンアップがなく**、シェルは永続化します。

唯一の前提条件

必須 = いいえ(! $field['required'] 分岐)の File Upload フィールドを持つ Elementor Pro Form ウィジェットを含む公開ページ。フィールド設定は _elementor_data からサーバーサイドで読み取られるため、攻撃者はこれを切り替えられません — ただし「任意添付ファイル」フィールドは一般的です。

ファイル名の復元(完全リモート、ファイルシステムアクセスなし)

保存名 = uniqid() = %08x%05x = (Unix 秒)(マイクロ秒)。秒は HTTP Date レスポンスヘッダーで正確に漏洩します。不明なのはマイクロ秒(0〜999999)のみ → 上限 ≤10⁶ のオンライン GET ブルートフォース。poc.py --recover はレスポンス到着時間に基づいてマイクロ秒を絞り込み(同一場所/NTP 同期 ⇒ 秒〜分、ここでは約 26k リクエスト)、書き込みをリモートコード実行に変換します。

ラボ構成

サービスポートElementor Pro
wp-vulnhttp://127.0.0.1:89753.6.4 — 脆弱(正規ツリー、validation() の不整合は ≤4.2.1 と同一)
wp-patchedhttp://127.0.0.1:89763.6.4 に 4.2.2 相当の修正(return → continue、ループの整合)を適用

スタック:wordpress:php7.4-apache(mod_php)+ MariaDB 10.6 + Elementor(無料版)3.6.8 + Elementor Pro 3.6.4。 各バリアントには管理者(admin/labpass)と公開ページ 「CVE-2026-32475 Lab」(post_id=5、form_id=frm00001、アップロードフィールド field_cv、必須 = いいえ)があります。

バージョンに関する注記。 クリーンな 4.2.1/4.2.2 ソースは公開再配布できないため、ラボは正規の 3.6.4 ツリーで動作します。その validation()/process_field() の不整合は CVE-2026-32475 が説明するコードとバイト単位で同一です(このバグは長期間潜伏しており、4.2.2 で 2 つのループが整合されました)。A/B の「パッチ適用済み」ビルドはまさにその整合を適用します。

ビルドと実行

Docker + Docker Compose とアウトバウンドネットワーク(イメージ、Elementor 無料版、Elementor Pro ソースミラーの取得用)が必要です。build.sh は正規の Elementor Pro ツリーを自動的にクローンします。

root@kitploit:~
git clone https://github.com/dinosn/cve-2026-32475-elementor-pro-lab
cd cve-2026-32475-elementor-pro-lab
bash build.sh          # プラグインのクローン + compose up + WP/Elementor のインストール + フォームページの作成(両バリアント)
bash verify.sh         # A/B 検証:脆弱版はシェルを書き込み・実行、パッチ版は拒否。クリーンアップも実行。

エクスプロイト

root@kitploit:~
# 完全リモートの認証なし RCE(ページから post_id/form_id/field_id を自動抽出):
python3 poc.py -t http://127.0.0.1:8975 --page-id 5 --recover -c "id; uname -a"

# ブロックリストバイパスのみを検証(シェルは検査用に残す):
python3 poc.py -t http://127.0.0.1:8975 --post-id 5 --form-id frm00001 --field-id field_cv

ファイル

  • docker-compose.yml — 2×(WordPress + MariaDB)、vuln:8975 / patched:8976
  • elementor-pro-vuln/ — 正規の Elementor Pro 3.6.4(脆弱版)、build.sh によって生成、git 無視
  • elementor-pro-patched/ — 同じツリーに validation() の return→continue を適用、patch_pro.sh によって生成、git 無視
  • evidence/verify_transcript.txt — 成功した verify.sh 実行のキャプチャ
  • install_wp.sh — WP + Elementor 無料版の wp-cli インストール + Pro の有効化 + フォームページの作成 + アップロード権限の修正
  • setup_page.php — 任意アップロードフィールド付きの Elementor フォームページを構築
  • patch_pro.sh — パッチ適用済みツリーを生成 + 1 行の差分を表示
  • poc.py — 認証なしの不整合アップロード + uniqid() ファイル名復元 + RCE
  • verify.sh — 独立したファイルシステムオラクルによる A/B 検証(書き込みだけでなく実行を証明)
  • build.sh — ワンショットビルド

クリーンアップ/破棄

root@kitploit:~
cd /root/cve-2026-32475-lab && docker compose down -v
ツールをダウンロード