## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-NXPLOITED-CVE-2026-10818
# CVE-2026-10818
WPForms Pro <= 1.10.1.1 - チャンクアップロードのInit/Finalize順序に起因する未認証の任意ファイル書き込み
   
# CVE-2026-10818
### WPForms Pro ≤ 1.10.1.1 — チャンクアップロードによる未認証の任意ファイル書き込み
**概念実証(PoC)エクスプロイト**
チャンクアップロードのInit/Finalize順序 → 予測可能なパス公開 → リモートコード実行
* * *
## 脆弱性の概要
項目| 詳細
---|---
**CVE ID**| CVE-2026-10818
**影響を受けるプラグイン**| WPForms Pro (WordPress)
**影響を受けるバージョン**| **1.10.1.1** までの全バージョン
**種別**| 未認証の任意ファイル書き込み
**CWE**| CWE-434: Unrestricted Upload of File with Dangerous Type
**CVSS 3.1**| **8.1 HIGH** — `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H`
**認証**| 不要
WordPress用プラグインWPForms Proは、`ajax_chunk_upload_finalize` 関数を介して、1.10.1.1 までの全バージョンで任意ファイルアップロードの脆弱性の影響を受けます。これは、ファイルタイプの検証が、チャンクのメタデータとファイル内容がすでにディスクに書き込まれた**後** に実行され、さらに検証が失敗しても結合済みファイルが**削除されない** ことが原因です。これにより、未認証の攻撃者が実行可能な可能性のあるファイルをアップロードできるため、リモートコード実行が可能になります。
### 根本原因
root@kitploit:~
wpforms_upload_chunk_init → Metadata created BEFORE extension validation
wpforms_upload_chunk → Chunk bytes written regardless of init result
wpforms_file_chunks_uploaded → File assembled BEFORE type validation
→ File persists on disk even when validation fails
この脆弱性チェーンは、チャンクアップロードのライフサイクルにおける重大な順序の欠陥を悪用します:
1. **Init** は、ファイル拡張子が許可されているかどうかを確認する前に、ディスク上にメタデータを作成します
2. **Chunk** はメタデータを読み込み、生のバイトを**予測可能なパス** (`SHA1(UUID)-0.chunk`)に書き込みます
3. **Finalize** はMIMEタイプを検証する前に最終ファイルを組み立てます — ただし、失敗した場合のクリーンアップは行われません
4. 3つのAJAXエンドポイントのいずれでもnonce検証は強制されません
5. 3つのルートはすべて**未認証の訪問者** 向けに登録されています(`wp_ajax_nopriv_*`)
* * *
## 特徴
* **マルチターゲットスキャン** — ターゲットのリストを入力し、並行処理します
* **自動フォーム検出** — ページ、サイトマップ、および100以上の一般的なパスをクロールして、WPFormsのアップロードフィールドを特定します
* **バージョン検出** — `readme.txt` とHTMLソースを読み取って、脆弱なWPFormsバージョンを特定します
* **AJAXルート検証** — 実行前に `wpforms_upload_chunk_init` が外部から到達可能であることを確認します
* **二重アップロード戦略:**
* **ファイナライズアップロード** (init → chunk → finalize)— 安全な拡張子と実行可能な拡張子の両方を使用
* **チャンクのみのアップロード** (init → chunk、finalizeをスキップ)— `SHA1(UUID)` による決定的なファイルパスを利用
* **予測可能なパス計算** — `SHA1(client-controlled UUID)` を計算し、推測なしで正確なチャンクURLを導出します
* **ディレクトリ一覧の差分** — 実行ファイルアップロードの前後で `/wpforms/tmp/` のスナップショットを取り、新しく書き込まれたファイルを特定します
* **ハッシュ漏洩の抽出** — すべてのレスポンスボディとヘッダーをスキャンし、`<32hex>.<ext>` のファイル名パターンを検出します
* **実行検証** — レスポンスボディ内の一意のシグネチャを確認して実際のPHP実行を確認し、静的ファイル配信やソースコード開示を除外します
* **PATH_INFOプロービング** — サーバーハンドラのバイパス(`.chunk/x.php`、`/.php`)を試行し、非PHP拡張子でのPHP実行を誘発します
* **ポリグロットペイロード** — IENDチャンクの後にPHPを埋め込んだ有効なPNG画像を生成します
* **プロフェッショナルな出力** — ターゲットごとのステータス追跡を備えたリアルタイムのカラーコード化ターミナル表示
* * *
## 要件
root@kitploit:~
Python >= 3.8
root@kitploit:~
pip install requests urllib3 beautifulsoup4
> `beautifulsoup4` はオプションですが、より信頼性の高いフォームフィールド抽出のために推奨されます。
* * *
## 使用方法
root@kitploit:~
python CVE-2026-10818.py
次の項目を入力するよう求められます:
プロンプト| 説明| デフォルト
---|---|---
**ターゲットファイル**| 1行に1ターゲットを含むテキストファイルのパス| `list.txt`
**スレッド数**| 同時ワーカー数(1〜20)| `5`
### ターゲットファイル形式
root@kitploit:~
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
1行に1つのURLを指定します。`http://`、`https://`、ベアドメイン、IP、サブディレクトリ配下のインストールに対応しています。
* * *
## 出力
### ターミナル
root@kitploit:~
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ██▄ ██ ██ ██ ┃
┃ ████ ██ ████ ┃
┃ ██ ██ ██ ██ ┃
┃ ██ ████ ████ ┃
┃ ██ ███ ██ ██ ┃
┃ ┃
┃ Nxploited ━ Khaled Alenazi ━ T.m @Kxploit ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ CVE-2026-10818 WPForms Pro ≤ 1.10.1.1 ┃
┃ Chunked Upload → Predictable Path → RCE ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
スキャン中、各ターゲットはラベル付きステージを順に進行します:
root@kitploit:~
02:14:52 ◆ target.com VER WPForms 1.9.3.1 vulnerable
02:14:53 ◆ target.com FORM 1 upload form(s) on /contact
02:14:53 ◆ target.com UPLOAD 6 safe + 5 exec payloads
02:14:55 ◆ target.com FIN poly_png → a8f3...1b22.png URL returned
02:14:57 ◆ target.com DIR listing enabled, 4 file(s) before exec upload
02:14:59 ◐ target.com EXEC shell_php → finalized on disk (hash unknown)
02:15:01 ◆ target.com DIR 1 NEW exec file(s) after upload!
● target.com SHELL dir-new:7c4f...e8a1.php https://target.com/wp-content/uploads/wpforms/tmp/7c4f...e8a1.php
### 結果ファイル
すべての結果は `Nx_hit/` に保存されます:
ファイル| 内容
---|---
`Nx_shell.txt`| RCE確定 — URL、ラベル、レスポンスボディのプレビュー
`Nx_vuln.txt`| 実行検証なしの任意ファイル書き込み確定
### サマリー
root@kitploit:~
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ COMPLETE 150 targets processed ┃
┃ ┃
┃ ● 3 shell ◐ 12 vuln ○ 85 skip ✗ 50 miss ┃
┃ ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
記号| 意味
---|---
`●` shell
* * *
## スキャンパイプライン
root@kitploit:~
Target
│
├─ Reachability (HTTPS → HTTP fallback)
├─ WPForms Version Detection
├─ Form Discovery (100+ page paths + sitemap crawl)
├─ AJAX Route Validation
│
├─ Phase 1: Safe Uploads (png/jpg/pdf + finalize → URL)
│ └─ Shell verification on returned URLs
│
├─ Phase 2: Directory Snapshot (BEFORE)
│
├─ Phase 3: Exec Uploads (php/phtml/php5/phar/shtml + finalize)
│ ├─ Leaked filename extraction from response
│ └─ Hash pattern extraction from body + headers
│
├─ Phase 4: Directory Snapshot (AFTER) → Diff → New exec files
│ └─ Shell verification on each new file
│
├─ Phase 5: Hash Leak Verification
│ └─ Build URLs from leaked hashes → Shell check
│
├─ Phase 6: Chunk-Only Uploads (no finalize → predictable SHA1 path)
│ └─ Direct access + PATH_INFO bypass probing
│
└─ Result Classification (shell / vuln / skip / miss)
* * *
## 免責事項
このツールは**認可されたセキュリティテストおよび教育目的の研究専用** として提供されます。所有しているシステム、または明示的な書面によるテスト許可を得たシステムでのみ使用してください。
コンピュータシステムへの不正アクセスは違法です。作者は、本ソフトウェアの使用に起因する誤用、損害、または法的結果について**一切の責任を負いません** 。
本ツールを使用することにより、利用者はご自身の行為に対して単独で責任を負い、適用されるすべての法律および規制を遵守することに同意したものとみなされます。
* * *
**作者: Nxploited**
Khaled Alenazi
T.m @Kxploit