## https://sploitus.com/exploit?id=92EBD3D2-4256-54EE-9C2C-C4BA105BAC3E
# CVE-2026-10818
WPForms Pro <= 1.10.1.1 - Unauthenticated Arbitrary File Write via Chunked Upload Init/Finalize Ordering
CVE-2026-10818
WPForms Pro โค 1.10.1.1 โ Unauthenticated Arbitrary File Write via Chunked Upload
Proof-of-Concept Exploit
Chunked Upload Init/Finalize Ordering โ Predictable Path Exposure โ Remote Code Execution
---
## Vulnerability Overview
| Field | Detail |
|---|---|
| **CVE ID** | CVE-2026-10818 |
| **Affected Plugin** | WPForms Pro (WordPress) |
| **Affected Versions** | All versions up to and including **1.10.1.1** |
| **Type** | Unauthenticated Arbitrary File Write |
| **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` |
| **Authentication** | None required |
The WPForms Pro plugin for WordPress is vulnerable to Arbitrary File Upload in all versions up to, and including, 1.10.1.1 via the `ajax_chunk_upload_finalize` function. This is due to the file type validation occurring **after** chunk metadata and file contents have already been written to disk, and the assembled file **not being deleted** upon validation failure. This makes it possible for unauthenticated attackers to upload files that may be executable, which makes remote code execution possible.
### Root Cause
```
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
```
The vulnerability chain exploits a critical ordering flaw in the chunked upload lifecycle:
1. **Init** creates metadata on disk before checking if the file extension is allowed
2. **Chunk** loads the metadata and writes raw bytes to a **predictable path** (`SHA1(UUID)-0.chunk`)
3. **Finalize** assembles the final file before validating its MIME type โ and does not clean up on failure
4. No nonce verification is enforced on any of the three AJAX endpoints
5. All three routes are registered for **unauthenticated visitors** (`wp_ajax_nopriv_*`)
---
## Features
- **Multi-target scanning** โ feed a list of targets, processed concurrently
- **Automatic form discovery** โ crawls pages, sitemaps, and 100+ common paths to locate WPForms upload fields
- **Version detection** โ reads `readme.txt` and HTML source to identify vulnerable WPForms versions
- **AJAX route validation** โ confirms `wpforms_upload_chunk_init` is externally reachable before proceeding
- **Dual upload strategy:**
- **Finalized uploads** (init โ chunk โ finalize) with both safe and executable extensions
- **Chunk-only uploads** (init โ chunk, skip finalize) for deterministic file paths via `SHA1(UUID)`
- **Predictable path calculation** โ computes `SHA1(client-controlled UUID)` to derive the exact chunk URL without guessing
- **Directory listing diff** โ snapshots `/wpforms/tmp/` before and after exec uploads to identify newly written files
- **Hash leak extraction** โ scans all response bodies and headers for `.` filename patterns
- **Execution verification** โ confirms actual PHP execution by checking for a unique signature in the response body, filtering out static file serving and source code disclosure
- **PATH_INFO probing** โ attempts server-handler bypasses (`.chunk/x.php`, `/.php`) to trigger PHP execution on non-PHP extensions
- **Polyglot payloads** โ generates valid PNG images with embedded PHP after the IEND chunk
- **Professional output** โ real-time color-coded terminal display with per-target status tracking
---
## Requirements
```
Python >= 3.8
```
```bash
pip install requests urllib3 beautifulsoup4
```
> `beautifulsoup4` is optional but recommended for more reliable form field extraction.
---
## Usage
```bash
python CVE-2026-10818.py
```
You will be prompted for:
| Prompt | Description | Default |
|---|---|---|
| **Targets file** | Path to a text file containing one target per line | `list.txt` |
| **Threads** | Number of concurrent workers (1โ20) | `5` |
### Target File Format
```
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
```
One URL per line. Supports `http://`, `https://`, bare domains, IPs, and subdirectory installations.
---
## Output
### Terminal
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ โโโ โโ โโ โโ โ
โ โโโโ โโ โโโโ โ
โ โโ โโ โโ โโ โ
โ โโ โโโโ โโโโ โ
โ โโ โโโ โโ โโ โ
โ โ
โ Nxploited โ Khaled Alenazi โ T.m @Kxploit โ
โฃโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโซ
โ CVE-2026-10818 WPForms Pro โค 1.10.1.1 โ
โ Chunked Upload โ Predictable Path โ RCE โ
โ Results โโธ Nx_hit/ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
During the scan, each target progresses through labeled stages:
```
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
```
### Result Files
All results are saved to `Nx_hit/`:
| File | Content |
|---|---|
| `Nx_shell.txt` | Confirmed RCE โ URL, label, and response body preview |
| `Nx_vuln.txt` | Confirmed arbitrary file write without execution verification |
### Summary
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ COMPLETE 150 targets processed โ
โ โ
โ โ 3 shell โ 12 vuln โ 85 skip โ 50 miss โ
โ โ
โ Results โโธ Nx_hit/ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
| Symbol | Meaning |
|---|---|
| `โ` shell | PHP execution confirmed on remote target |
| `โ` vuln | File written to disk, execution not confirmed |
| `โ` skip | Target unreachable, patched, or no upload form found |
| `โ` miss | Upload attempts failed |
---
## Scan Pipeline
```
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)
```
---
## Disclaimer
This tool is provided **strictly for authorized security testing and educational research purposes**. Use it only on systems you own or have explicit written permission to test.
Unauthorized access to computer systems is illegal. The author assumes **no liability** for misuse, damage, or any legal consequences resulting from the use of this software.
By using this tool, you agree that you are solely responsible for your actions and that you will comply with all applicable laws and regulations.
---
By: Nxploited
Khaled Alenazi
T.m @Kxploit