razureink/cve-2026-63030_60137-wordpress_rce_reproduction
GitHub: razureink/cve-2026-63030_60137-wordpress_rce_reproduction
该项目复现了由两个 CVE 组合而成的 WordPress Core 未认证远程代码执行漏洞链「wp2shell」,并提供了可运行的 PoC 利用脚本与缓解方案。
Stars: 0 | Forks: 0
# CVE-2026-63030 / CVE-2026-60137 — "wp2shell" WordPress Core RCE 链
**发现者:** Searchlight Cyber(通过 GPT-5.6 Sol)
**严重程度:** 严重 — CVSS 9.8 (CVE-2026-63030),CVSS 9.1 (CVE-2026-60137)
**状态:** 正被积极利用 — 已被加入 CISA KEV
**别名:** "wp2shell"
## 概述
这是 WordPress Core 中由两个 CVE 组成的一个无需认证的远程代码执行链:
| CVE | 组件 | 类型 | CWE |
|---|---|---|---|
| CVE-2026-63030 | WP REST API 批量 endpoint | 路由混乱 / 访问控制绕过 | CWE-436 |
| CVE-2026-60137 | `WP_Query` `author__not_in` 参数 | SQL 注入 | CWE-89 |
单独来看,每个漏洞都很严重;结合使用时,它们允许未经认证的攻击者在目标上执行任意 PHP 代码并部署 webshell。
## 技术细节
### CVE-2026-63030 — 批量 Endpoint 路由混乱
WordPress REST API 在 `/wp-json/wp/v2/batch` 处暴露了一个批量 endpoint。由于路由解析中的一个缺陷(在 WP 6.9 重写的路由中间件中引入),批量处理器未能正确验证批量中的*内部*子请求是否继承了外部请求的认证和权限检查。攻击者可以构造一个批量 payload 来:
1. 逃逸路由命名空间边界。
2. 在未经所需权限检查的情况下调用特权 endpoint(例如 `wp/v2/users`、`wp/v2/plugins`)。
3. 利用 `WP_REST_Server::dispatch()` 将伪造的路由参数传递给内部处理程序。
结合参数 smuggling,这绕过了*读取*操作以及部分*写入*操作的所有认证防护。
### CVE-2026-60137 — `author__not_in` SQL 注入
`WP_Query` 类接受一个 `author__not_in` 参数,旨在排除特定作者 ID 的帖子。`WP_Query::get_posts()` 方法中的一个类型强制转换 bug(在 WP 6.9 的查询净化重构中引入)导致当作为特殊构造的关联数组提供时,`author__not_in` 的值会被直接内插到 SQL 的 `WHERE` 子句中,而没有进行适当的参数化。
该注入发生在生成的 SQL 语句 `post_author IN (...)` 中。通过嵌套带有原始 SQL 片段的数组,攻击者可以脱离 `IN` 子句并执行任意的 `UNION` / `INTO OUTFILE` 语句——前提是数据库用户具有 `FILE` 权限。
### 组合链
```
Attacker (unauthenticated)
│
├─ POST /wp-json/wp/v2/batch
│ └─ CVE-2026-63030: Bypass auth, invoke internal query API
│ └─ CVE-2026-60137: Inject SQL via author__not_in
│ └─ UNION SELECT ... INTO OUTFILE 'webshell.php'
│ └─ Webshell deployed to web root
│ └─ RCE achieved
```
批量 endpoint 提供了*利用向量*;SQLi 提供了*payload 投递*。
## 受影响版本
| 版本范围 | 完整利用链 |
|---|---|
| WordPress 6.9.0 – 6.9.4 | ✅ 存在两个 CVE |
| WordPress 7.0.0 – 7.0.1 | ✅ 存在两个 CVE |
| WordPress ≤ 6.8.x | 仅存在 CVE-2026-63030(SQLi 不可利用) |
补丁已在 WordPress 6.9.5 和 7.0.2 中发布(均于 2026-07-16 发布)。
## 复现步骤
1. 确认目标 WordPress 版本处于受影响范围内。
2. 验证 `/wp-json/wp/v2/batch` 是否返回 200(而不是 403/404)。
3. 使用 `--target` 标志运行 PoC(见下文)。
4. 通过 `/wp-content/webshell.php?cmd=id` 确认 webshell。
## PoC 用法
```
python exploit.py --target https://target.example.com --action deploy-webshell
python exploit.py --target https://target.example.com --action exec --command "id"
python exploit.py --target https://target.example.com --action exec --command "uname -a"
```
## 缓解措施
- **升级**至 WordPress 6.9.5+ 或 7.0.2+。
- 如果无法立即修补:
- 在 WAF / 反向代理上阻止 `POST /wp-json/wp/v2/batch`。
- 移除 WordPress MySQL 用户的 `FILE` 权限。
- 启用 `define('DISALLOW_FILE_EDIT', true);` 和 `define('DISALLOW_FILE_MODS', true);`。
- 监控 `wp-content/` 下出现的不明 `.php` 文件。
- 检查请求日志中带有非整数值的 `author__not_in`。
## 参考
- [Searchlight Cyber 安全公告 — "wp2shell"] (https://searchlightcyber.com/advisories/wp2shell)
- [CVE-2026-63030 — NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-63030)
- [CVE-2026-60137 — NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-60137)
- [CISA 已知被利用漏洞目录](https://www.cisa.gov/known-exploited-vulnerabilities-catalog)
- [WordPress Core 6.9.5 发布说明](https://wordpress.org/news/2026/07/wordpress-6-9-5/)
标签:CISA项目, Web安全, WordPress, 漏洞复现, 编程工具, 蓝队分析, 访问控制绕过, 远程代码执行, 逆向工具