Exploit for CVE-2026-63030 exploit
CVE-2026-63030 与 CVE-2026-60137 组合漏洞(wp2shell)使 WordPress 6.9.0-6.9.4/7.0.0-7.0.1 版本面临未认证远程代码执行风险,攻击者通过 REST API 路由混淆和 SQL 注入可完全接管网站,请立即升级至 7.0.2。
Exploit for CVE-2026-63030 exploit
📋 漏洞概述
WordPress 6.9.0-6.9.4/7.0.0-7.0.1 通过 REST API 批处理路由混淆与 WP_Query SQL 注入链实现未认证远程代码执行。
📋 基础信息
| 受影响版本 | WordPress 6.9.0-6.9.4, 7.0.0-7.0.1 |
| 漏洞类型 | 权限绕过、SQL注入 |
| CVSS | 9.8 · Critical |
| CVE | CVE-2026-63030 |
🔬 漏洞根因
CVE-2026-63030:WordPress REST API 批处理(batch)路由在处理请求时未能正确区分内部路由与外部路由,导致未认证攻击者可构造特制请求绕过身份验证检查,调用本应需要管理员权限的端点。CVE-2026-60137:WP_Query 的 author__not_in 参数在构建 SQL 查询时未对用户输入进行充分过滤和参数化,导致可注入恶意 SQL 语句。两个漏洞组合利用:先利用路由混淆绕过认证,再利用 SQL 注入获取管理员权限令牌,最终实现任意代码执行。
🎯 攻击场景
1. 攻击者向目标 WordPress 站点的 /wp-json/wp/v2/users 端点发送特制批处理请求,利用 REST API 批处理路由混淆(CVE-2026-63030)绕过身份验证;2. 攻击者通过 WP_Query 的 author__not_in 参数注入 SQL 语句(CVE-2026-60137),从数据库中提取管理员用户的密码哈希和会话令牌;3. 攻击者利用获取的凭据或令牌登录为管理员;4. 登录后,攻击者通过 WordPress 后台的主题/插件编辑器或直接上传恶意插件执行任意 PHP 代码;5. 成功植入 Web Shell,实现完全的远程控制。
💥 漏洞影响
未认证攻击者可组合利用两个漏洞,在无需任何凭证的情况下完全接管 WordPress 站点,包括:执行任意 PHP 代码、读取/修改数据库、篡改文件、安装恶意插件、控制所有用户账户,并可进一步内网横向移动。影响所有运行于 6.9.0-6.9.4 及 7.0.0-7.0.1 版本且启用 REST API(默认开启)的 WordPress 实例。
🛡️ 修复建议
立即升级至 WordPress 7.0.2 或更高版本(官方已修复);如无法升级,临时禁用 REST API 批处理功能(添加 filter 拦截 batch 路由)并安装 Web 应用防火墙(WAF)规则拦截含有 author__not_in 参数的可疑请求;检查现有站点是否已被植入后门(如 wp-content/uploads/ 下的 .php 文件)。
📎 参考链接
- https://nvd.nist.gov/vuln/detail/CVE-2026-63030
- https://nvd.nist.gov/vuln/detail/CVE-2026-60137
- https://github.com/Icex0/wp2shell-poc
- 原始来源(Sploitus)
🚨 威胁评估
| 📈 EPSS 利用概率 | 低 (8.9%) (高于 94.7% 的漏洞) |
| 🚨 CISA KEV | 未被已知利用 |
| 🔧 公开 PoC | 51 个公开 PoC 仓库 |
⚠️ 本文由漏洞情报系统自动生成,仅供安全研究与防御参考。生成时间: 2026-07-21 08:15 | 来源: Sploitus
🤖 常见问题解答(FAQ)
❓ 如何检测我的站点是否已被该漏洞利用?
检查 wp_users 表中是否有多余的管理员账号,检查 wp-content/uploads/ 下有无未授权的 .php 文件,查看 Apache/Nginx 访问日志中是否存在对 /wp-json/wp/v2/users 的大量异常 POST 请求。
❓ CVE-2026-63030 是否需要认证?
不需要。该漏洞的核心是 REST API 批处理路由混淆,允许未认证攻击者以管理员身份调用受保护端点,是预认证漏洞。
❓ 临时缓解措施有哪些?
在 functions.php 中添加代码禁用 REST API 批处理路由:add_filter('rest_pre_dispatch', function($r, $s, $rq){ if(strpos($rq->get_route(),'batch')!==false) return new WP_Error('disabled'); },10,3)。