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, 漏洞复现, 编程工具, 蓝队分析, 访问控制绕过, 远程代码执行, 逆向工具