一个针对性、临时性的缓解措施,用于防范对 WordPress Core REST Batch API 端点的未认证访问。
SkelerSecurity Core 安全插件 要求在进行认证之后,WordPress 才能处理对 Core REST Batch API 路由的请求:
/wp-json/batch/v1/?rest_route=/batch/v1它被设计为针对常被称为 wp2shell 的 WordPress REST Batch API 漏洞链的一个有限范围内的深度防御控制措施。该插件使用 WordPress 的 rest_pre_dispatch 过滤器来拒绝匿名批处理请求(返回 HTTP 401 未授权),同时保留已认证的 WordPress 和 REST API 用户的访问权限。
[!IMPORTANT] 该插件是一个临时缓解措施,不能替代 WordPress Core 更新。 请立即应用最新的 WordPress 安全版本,并验证更新是否成功完成。
公开报告描述了一个关键的 WordPress Core 漏洞链,涉及 REST Batch API 路由混淆(CVE-2026-63030)和一个相关的 SQL 注入问题(CVE-2026-60137)。受影响的端点可以通过漂亮的固定链接和查询字符串两种 REST 路由形式访问。
报告的受影响 Core 版本包括:
| 版本分支 | 受影响版本 | 修复版本 |
|---|---|---|
| WordPress 6.9 | 6.9.0–6.9.4 | 6.9.5 |
| WordPress 7.0 | 7.0.0–7.0.1 | 7.0.2 |
WordPress 6.8 分支也在 6.8.6 中收到了相关的加固。请使用环境中最新可用的受支持 WordPress 版本,而不要将版本范围视为延迟更新的理由。
/batch/v1 REST 路由提供一个有效的已认证 WordPress 用户。/wp-json/batch/v1 和 ?rest_route=/batch/v1 两种形式,因为 WordPress 将两者解析为相同的 REST 路由。401 的标准 REST 错误。rest_pre_dispatch 优先级 -1000)。为了获得最强的临时覆盖,请将此插件与 WAF 或反向代理规则结合使用,以阻止对上述两个端点形式的匿名请求。
将 skelersecurity-core-security 目录复制到:
wp-content/plugins/
在 插件 → 已安装插件 中激活插件。
在 工具 → SkelerSecurity Core 中查看插件状态。
wp plugin activate skelersecurity-core-security
插件激活后立即启用。访问 工具 → SkelerSecurity Core 进行管理:
| 设置项 | 默认值 | 描述 |
|---|---|---|
| Batch API 保护 | 已启用 | 要求对 Core REST Batch API 路由进行认证。 |
| 最小审计日志 | 已启用 | 记录匿名 Batch API 请求被拦截的时间。 |
| 保留条目数 |
可选的审计日志仅存储:
/batch/v1)它特意不记录 IP 地址、Cookie、授权标头、请求体、用户名或其他敏感请求数据。
| 请求类型 | 保护启用时的预期结果 |
|---|
匿名拦截响应使用错误码:
rest_batch_authentication_required
/wp-json/batch/v1rest_route=/batch/v1Batch API 可能被 WordPress 管理流程、插件、主题、移动客户端或外部集成使用。已认证的请求仍然允许,但在启用插件后应测试关键业务功能。
潜在影响可能包括那些故意向 Core Batch API 提交未认证请求的集成。如果确实需要该行为,请仔细评估风险,并实施适当认证的集成,而不是广泛暴露端点。
网络层缓解措施应涵盖两种路由风格。仅阻止 /wp-json/batch/v1 是不够的,因为 WordPress 还可以通过 rest_route 查询参数路由请求。
建议的规则逻辑:
/wp-json/batch/v1 的匿名请求(允许可选的尾部斜杠)。rest_route=/batch/v1 的匿名请求。在您的环境中测试该规则。如果无法立即部署 WAF 更改,此插件很有用,但它不应阻止您修补 WordPress Core。
请不要通过公开的 GitHub Issue 报告安全漏洞。
请私下向您的安全联系人或仓库所有者报告可疑漏洞。包括清晰的描述、受影响版本、可复现的概念验证和影响评估。不要包含凭据、个人数据或破坏性负载。
该项目采用 GNU General Public License v2.0 或更高版本 许可。
| 50 |
| 本地审计条目的保留上限;可在 10 到 200 之间配置。 |
对 /wp-json/batch/v1 的匿名请求 | 被拦截,返回 HTTP 401 |
对 /?rest_route=/batch/v1 的匿名请求 | 被拦截,返回 HTTP 401 |
对 /batch/v1 的已认证 WordPress/REST 请求 | 允许,按正常 WordPress 授权处理 |
| 对其他 REST 路由的请求 | 不受该插件影响 |