Nxploited/CVE-2026-10818

GitHub: Nxploited/CVE-2026-10818

针对 WPForms Pro 分块上传顺序缺陷(CVE-2026-10818)的无身份验证远程代码执行利用与批量验证工具。

Stars: 0 | Forks: 0

# CVE-2026-10818 WPForms Pro <= 1.10.1.1 - 通过分块上传初始化/完成顺序实现的无身份验证任意文件写入

CVE CVSS CWE Python

CVE-2026-10818

WPForms Pro ≤ 1.10.1.1 — 通过分块上传实现的无身份验证任意文件写入

概念验证漏洞利用
分块上传初始化/完成顺序 → 可预测路径暴露 → 远程代码执行

## 漏洞概述 | 字段 | 详情 | |---|---| | **CVE ID** | CVE-2026-10818 | | **受影响插件** | WPForms Pro (WordPress) | | **受影响版本** | 包含 **1.10.1.1** 及之前的所有版本 | | **类型** | 无身份验证任意文件写入 | | **CWE** | CWE-434: 危险类型文件的不受限上传 | | **CVSS 3.1** | **8.1 高危** — `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H` | | **身份验证** | 无需身份验证 | 所有包含 1.10.1.1 及之前版本的 WordPress WPForms Pro 插件均存在任意文件上传漏洞,该漏洞源于 `ajax_chunk_upload_finalize` 函数。这是因为在分块元数据和文件内容已经写入磁盘**之后**才进行文件类型验证,并且在验证失败时**没有删除**组装好的文件。这使得未经身份验证的攻击者有可能上传可执行文件,从而导致远程代码执行。 ### 根本原因 ``` 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. 三个 AJAX 端点均未强制执行 nonce 验证 5. 所有三个路由都为**未身份验证的访问者**注册 (`wp_ajax_nopriv_*`) ## 功能 - **多目标扫描** — 提供目标列表,并发处理 - **自动表单发现** — 抓取页面、Sitemap 和 100 多个常见路径,以定位 WPForms 上传字段 - **版本检测** — 读取 `readme.txt` 和 HTML 源代码以识别存在漏洞的 WPForms 版本 - **AJAX 路由验证** — 在继续之前确认 `wpforms_upload_chunk_init` 可以从外部访问 - **双重上传策略:** - **完成上传** (init → chunk → finalize),包含安全扩展名和可执行扩展名 - **仅分块上传** (init → chunk,跳过 finalize),通过 `SHA1(UUID)` 获取确定性文件路径 - **可预测路径计算** — 计算 `SHA1(客户端控制的 UUID)` 以获取准确的分块 URL,无需猜测 - **目录列表差异对比** — 在执行上传前后对 `/wpforms/tmp/` 进行快照对比,以识别新写入的文件 - **哈希泄露提取** — 扫描所有响应正文和标头,查找 `<32hex>.` 文件名模式 - **执行验证** — 通过检查响应正文中是否存在唯一特征来确认实际的 PHP 执行,过滤掉静态文件服务和源代码泄露 - **PATH_INFO 探测** — 尝试服务器处理程序绕过 (`.chunk/x.php`, `/.php`) 以在非 PHP 扩展名上触发 PHP 执行 - **多语言 Payload** — 生成在 IEND 块之后嵌入了 PHP 的有效 PNG 图像 - **专业输出** — 带有每个目标状态跟踪的实时彩色终端显示 ## 环境要求 ``` Python >= 3.8 ``` ``` pip install requests urllib3 beautifulsoup4 ``` ## 使用方法 ``` python CVE-2026-10818.py ``` 系统将提示您输入: | 提示 | 描述 | 默认值 | |---|---|---| | **Targets file** | 包含每行一个目标的文本文件路径 | `list.txt` | | **Threads** | 并发工作线程数 (1–20) | `5` | ### 目标文件格式 ``` https://example.com http://target.org subdomain.example.net 192.168.1.100 https://example.com/wordpress ``` 每行一个 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 | 已在远程目标上确认 PHP 执行 | | `◐` vuln | 文件已写入磁盘,但未确认执行 | | `○` skip | 目标无法访问、已修补或未找到上传表单 | | `✗` miss | 上传尝试失败 | ## 扫描流水线 ``` 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

标签:CISA项目, PoC, Python, WordPress, WPForms插件, 任意文件上传, 无后门, 暴力破解, 编程工具, 远程代码执行, 逆向工具