漏洞

WordPress 6.8–7.0 紧急升级:两项 CVE 已进 KEV,公开 wp2shell 证据止于 SQLi

立即将 WordPress 6.8.0–6.8.5 升至 6.8.6、6.9.0–6.9.4 升至 6.9.5、7.0.0–7.0.1 升至 7.0.2;两项 CVE 均已进入 KEV,其中 CVE-2026-63030 的 7 月 24 日期限已过,CVE-2026-60137 于 8 月 4 日到期;当前 #16658 检测阳性只证明 route confusion,历史固定模板支持 SQLi 前半链,完整 RCE 尾链尚未独立复现;只有版本、制品与运行态证据齐备才能关闭修复。

米色纸张上的密封信封分出上下两条机械管线,上路经过钥匙与带云形侧管的锁门,下路经过蓝色书册、整数珠串、石拱与圆柱,门后终止于灰色雾区。
文章导航

研究依据复核 WordPress 发布公告、仓库安全公告、固定修复提交、两项 CVE 的 CNA 与 CISA ADP、CISA KEV raw catalog 2026.07.24、Searchlight 与 Cloudflare 的协调披露、ProjectDiscovery 两代公共检测器及其验证、漏报和替换闭环、7 月 18 日固定公共实现,以及 BleepingComputer 转述的 watchTowr 具名观察

来源WordPress 7.0.2 发布公告 / WordPress 仓库 GHSA 与固定修复提交 / 两项 CVE 的 CNA 与 CISA ADP 记录 / CISA KEV raw catalog 2026.07.24 / Searchlight Cyber wp2shell 公告 / Cloudflare 协调防御说明 / ProjectDiscovery 历史 PR #16596 与固定 9e6cb91 模板、issue #16629、替换 PR #16658、固定 d51e9a3 当前模板 / 7 月 18 日固定公共实现 / BleepingComputer 转述的 watchTowr 具名观察 / SOSEC 源码复核

1 先按维护分支升级,再讨论 wp2shell

处置答案可以先写进工单:WordPress 6.8.0–6.8.5 升至 6.8.6,6.9.0–6.9.4 升至 6.9.5,7.0.0–7.0.1 升至 7.0.2。6.8 只进入 CVE-2026-60137 的官方范围;6.9 与 7.0 同时进入 CVE-2026-60137 和 CVE-2026-63030 的范围,也是 WordPress 明确给出组合 RCE 结论的两条分支。CISA 已在 7 月 21 日把两项 CVE 加入 KEV:CVE-2026-63030 的 dueDate 为 7 月 24 日,更新本文时已经逾期;CVE-2026-60137 的 dueDate 为 8 月 4 日。受影响站点需要完整维护发行版或可审计的供应商等价回移。

WordPress 在 2026 年 7 月 17 日同时发布三条修复线,并为受影响版本启用强制自动更新。这里的“启用”描述更新系统开始采取动作;每个站点是否下载、写盘、切换运行实例和更新回滚源,仍需资产方逐项证明。受 CISA 要求约束的组织应把已过的 7 月 24 日日期作为立即升级、记录逾期例外并启动暴露窗口调查的触发点;其他组织也应把 KEV 当作已知利用的外部优先级信号。7.1 预发布资产的公开固定点是 beta2,生产关闭目标应使用正式维护发行版。早于 6.8 的版本位于这两项公告范围之外,其支持状态和其他已知漏洞需要另行处置。

KEV 当前回答的是“两项漏洞均存在已知利用”。两项 CISA ADP 在 7 月 21 日都把 SSVC exploitation 记为 active:CVE-2026-60137 是 Automatable=noTechnical Impact=total,CVE-2026-63030 是 Automatable=yesTechnical Impact=total;7 月 17 日的 none 只保留为状态转折前的历史记录。公开技术复现单独记录:历史固定模板支持匿名定时型盲 SQL 注入可达性,当前模板只检测路由混淆行为,公共记录没有一份可复放的 SQL 注入、持久化到 RCE 完整成功 transcript。版本、制品和运行态验收承担修复关闭,两代检测器分别承担补充调查。

2 一条匿名请求怎样走到 SQL 边界

这条链可以先用六步讲明白,再回到源码细节。历史固定 PR #16596 模板与固定源码共同覆盖到第六步的 SQL 注入前半段;7 月 24 日替换后的当前 #16658 模板在更早的路由混淆行为处停止,不发送 SQL 条件,也不使用 timing。第六步之后的数据库到代码执行路径由 WordPress 官方组合结论承担,当前采用的公共记录没有独立验证其完整实现。

  1. 批处理入口接收有序子请求。匿名客户端把多个 REST 操作放进 /batch/v1。服务器分别保存原始请求、路由匹配结果和验证结果,后面继续用同一个位置索引把三者配在一起。

  2. 一个准备阶段错误让两列长度不同。受影响的 serve_batch_request_v1() 只把早期 WP_Error 写入 $validation$matches 的对应位置为空。从这个点开始,同一个数字索引可能从两列取到属于不同子请求的状态。

  3. 嵌套子请求又重开顶层服务周期。批次已经处于 dispatch() 内部,受影响的集成入口和服务器入口仍可进入顶层服务路径。内部项目因而跨过原本拥有它的分派上下文,路由匹配、参数注册和后续请求之间的关系出现第二次混淆。

  4. 公共参数换到 posts controller 的查询语境。ProjectDiscovery 历史 PR #16596 的公开布局把携带 author_exclude 的 categories 请求放在嵌套批次中,并利用前两项状态冲突让该值抵达 posts controller。固定 7.0.1 源码显示,posts controller 在第 239–270 行把公共 author_exclude 映射到内部 author__not_in

  5. 查询层让标量绕开逐项整数化。2025 年进入 6.8.0 的缓存键整理只规范化数组;标量一直保留原文本,到连接 SQL 名单时才被包装成单元素数组。容器改变发生得太晚,无法补回已经跳过的元素转换。

  6. 历史公共检测器在这里观察到盲注条件。固定 PR #16596 模板使用结构相同的假条件与真条件请求,要求 HTTP 207、特定错误标记和真条件组至少七秒的响应时间。完整 flow 命中支持匿名定时型盲 SQL 注入可达性;模板不抽取数据,也不执行后续代码。7 月 22 日的多起漏报报告记录第三个 SQLi 请求在部分条件下没有执行,历史阴性因此只记录该次 flow 没有满足。ProjectDiscovery 于 7 月 24 日用 route-confusion 模板替换了这条 flow。

这六步同时解释两个版本边界。查询形状回归首先进入 6.8.0,所以 6.8.0–6.8.5 单独需要 CVE-2026-60137 修补;REST 批次相关变化首先进入 6.9.0,两个官方范围从 6.9 开始重叠。6.8.6 的固定树包含两处额外 REST 回移,说明维护者把代码带进了这条分支;WordPress 仍把 6.8 排除在 CVE-2026-63030 的公告范围之外。源码状态与公告范围回答不同问题,处置记录应分别保存。

2.1 位置数组与服务周期共同保存请求身份

批处理的索引承担关联键的职责。后续循环遍历原始请求,并用 $i 同时读取 $matches[$i]$validation[$i]。一个错误子请求已经在准备阶段结束,它仍须在两列都占据同一位置;否则第 i 个匹配结果和第 i 个验证结果就不再描述同一个请求。固定代码把同一个错误对象写入两列,保留响应成员数量,也保留每个错误或空占位与原请求的关系。

require-all-validate 提供了正常行为对照:当批次选择全量验证并出现错误时,WordPress 为每个位置返回错误或 null,后续成员保持原位。验收因此要检查响应数量和位置归属。简单拒绝所有含错误的批次可能隐藏错位,同时破坏合法协议语义;“请求没有崩溃”只记录运行存活,关联关系需要位置对照单独证明。

dispatch 守卫处理另一层所有权。rest_api_loaded() 是 WordPress 顶层 REST 集成入口,serve_request() 是服务器服务入口,dispatch() 处理已经构造好的内部请求。固定版本在前两处检查 is_dispatching():内部 dispatch 活跃时,集成入口提前结束,服务器入口返回 false。合法子请求继续留在当前 dispatch,顶层常量、服务器初始化、响应输出和终止流程保持原有单次周期。

米色纸张上,一只信封送出四张空白请求卡,经中央分派器进入左右两座木架;左架上排四槽且橙色错误卡占第三槽,下排对应位置缺失,右架上下各四槽且橙色位上下对齐;下方蓝色内环留在蓝色外环内,并由绿色重入门约束。
图 1。固定版本让错误在 match 与 validation 两列保留同一位置,并让内部子请求继续留在既有 dispatch() 周期;两项修补保存的是同一个请求在两个尺度上的身份。

2.2 查询修补把所有实际处理的形状汇入整数名单

CVE-2026-60137 的回归来自一次有正当目标的缓存键整理。WordPress changeset 59766、Git 提交 c22e267ccae50b45e9ae6e4b1e55ce68c408f842 在 2025 年 2 月进入 trunk,随后随 6.8.0 发布。它对数组形式的 author__not_in 去重、逐项执行 absint、排序并写回查询变量,让成员相同而顺序不同的输入共享稳定缓存语义。标量绕过 is_array() 分支,到 implode() 前才经 (array) 包装,原文本没有经历相同的整数转换。

6.7.2 是有效的历史负控制。旧实现先把输入变成数组,再对每个成员取绝对整数,标量和数组共享一条元素处理路径;6.8.0 已包含形状分支,提交祖先关系也与公告下限吻合。相邻的 author__in 路径仍对每种输入形状逐项整数化,进一步把问题限定在 author__not_in 的分支处理。文档把参数写作 int[],核心运行时同时接受并处理标量,最靠近 SQL 的边界因而需要统一约束每种被处理的形状。

固定实现保留外层 ! empty() 门,再把进入分支的字符串或数组交给 wp_parse_id_list()。字符串按逗号或空白拆分,数组只保留标量成员,每个成员经 absint 转成整数,然后去重。解析结果非空时,WP_Query 才排序、构造作者排除条件并写回规范化查询状态;解析为空时,条件和写回都不产生。

这里存在两种空路径。空字符串、字符串 0、整数 0 和空数组在外层门前结束,没有调用列表解析器;纯空白字符串或只含非标量成员的非空数组可以进入分支,随后解析为空。固定代码保留 WordPress 的兼容转换语义:普通非数字标量可能变成整数 0,负数变成非负整数。验收目标是原始非数字文本不再进入 SQL 名单、等价列表形成稳定状态,同时合法作者过滤结果保持一致;把所有异常值都预期为请求错误,会测量一个固定版本并未承诺的接口。

米色纸张上,外层空篮停在关闭门前;门后标量条与四令牌托盘进入同一筛网,解析为空的篮子在侧路止步,四枚令牌依次经过排序架与绿色 SQL 门;门后的独立接点把蓝线送回账册,主线继续通向圆柱,上方一条空的锈色旁路明确断开。
图 2。旧版晚到的 (array) 只改变容器;固定版本让字符串和数组共享 wp_parse_id_list(),只有解析后非空的整数名单进入查询条件。

3 已知利用、官方 RCE、公开 SQLi 与未验证尾链分层记录

3.1 历史模板固定 SQLi 前半链,当前模板只报告路由混淆

WordPress 仓库公告对 6.9.0–6.9.4 与 7.0.0–7.0.1 给出的产品结论很明确:CVE-2026-63030 的 REST API 批处理路由混淆与 CVE-2026-60137 的 author__not_in SQL 注入组合后导致远程代码执行。维护者公告确立产品结果,固定修复源码确立三项恢复的程序性质;两类证据共同决定升级优先级和验收对象。

Searchlight Cyber 把所发现结果命名为 wp2shell,报告它可由匿名用户在默认、无插件、无其他前置条件的 WordPress 安装上触发,并在披露窗口暂缓细节。Cloudflare 的协调说明把自己描述的匿名路径限定在 WordPress 6.9 及以上、未使用持久对象缓存的部署。WordPress 默认对象缓存只在单次请求内有效,默认无插件安装通常没有额外的持久实现,因此两份环境描述可以落在同一种站点形态上。缓存状态用于解释披露适用性;升级目标继续由官方版本范围决定。

ProjectDiscovery 在 7 月 18 日合并 PR #16596。固定在 9e6cb912c9d4df492b68ac0ecf8c333e2357de06 的历史模板同时引用两项 CVE,并记录易受影响与已修复目标的验证。它先识别 WordPress,再对 POST /?rest_route=/batch/v1 发送结构相同的假条件与真条件组:假条件步骤要求 HTTP 207 与 parse_path_failed,真条件步骤还要求 JSON 与至少七秒响应。模板没有设置假条件的最大时长,也没有计算两次请求的时长差。它的阳性证据等级是“经提交者验证的匿名定时型盲 SQL 注入检测”;SOSEC 没有重新运行该历史模板,上游验证继续归于 ProjectDiscovery 与提交者。

7 月 22 日,贡献者在 PR #16596 和 issue #16629 报告三请求模板出现多起 false negative,并描述第三个 SQLi 请求在部分条件下没有执行。7 月 24 日,ProjectDiscovery 以 PR #16658 的 head 5d14aeb15ba2ba90ebcffa97723b63150658a97d 把 timing/SLEEP SQLi flow 替换为确定性的 route-confusion 探针;贡献者报告新版本已在开发环境和此前漏报的在线目标上得到预期结果,issue #16629 随替换以 completed 关闭。更新本文时固定的 main ref 是 d51e9a38ae587ccdf7a75fe6aa0e11c81e7d7972,其中模板是两请求 flow。

当前模板先用 GET 响应中的 WordPress 标记作为内部前置门,再发送一个不含 SQL 参数的批处理 POST。阳性同时要求 HTTP 207、JSON、正文包含 block_cannot_read,并排除固定路由返回的 rest_term_invalid;模板元数据明确写明无 SQL execution、无 timing oracle。当前阳性只支持该布局下的 route-confusion 行为,当前阴性只说明指纹、请求执行与四个 matcher 没有共同满足。历史三请求阳性支持 SQL 注入可达性,历史阴性另受 issue #16629 记录的漏报限制。响应记录要分别保存:历史模板的 author_exclude、三次响应与时长、第三请求执行状态;当前模板的 GET 前置结果、批处理原始响应和四项 matcher。数据提取、代码执行和站点失陷各自需要新增证据。

3.2 公共尾链实现仍停在代码主张

公共提交 98716c82d2fe9b84ff15e5f6e7aa90d30927d602 描述了继续利用时间观测恢复值、重用 WordPress 状态、尝试创建管理员并上传和激活插件的后续实现。固定源码可以确认这些函数和控制流意图;仓库没有附带成功 transcript 或 CI 结果,SOSEC 没有执行该实现,当前采用记录也没有独立复现。它的证据等级是“具体、可审阅、未验证的尾链实现”,不能成为生产 IOC,也不能充当完整 wp2shell 的独立成功记录。

修复优先级保持最高:CISA 已把两项漏洞列为已知利用,产品维护者给出组合 RCE 结论,历史 ProjectDiscovery 阳性 flow 把公开可复核链推进到匿名盲 SQL 注入,当前 flow 提供更窄的 route-confusion 行为信号。防守动作先确认资产落入哪个官方版本范围,再安装对应分支的固定发行版;两代扫描器未命中都保持未决。事件调查保留精确层级:边缘请求表示扫描或尝试;当前模板阳性表示路由混淆行为;历史完整定时 flow 表示 SQL 注入可达性;服务器实际执行非预期代码才进入 RCE;未经授权的数据访问、执行或控制才进入失陷处置。各层都以实际记录为准。

CISA 状态在四天内发生了明确转折。两项 CVE 的 SSVC 容器在 7 月 17 日较晚时刻把 exploitation 记为 none,只代表当时的历史分析。7 月 18 日,BleepingComputer 转述 watchTowr 的 Benjamin Harris 所称“最初迹象”;报道没有公开遥测、IOC、受害者、请求分类或成功结果,该项观察保持未分类。7 月 21 日,CISA raw catalog 把两项 CVE 加入 KEV;60137 的更新 ADP 记录 Exploitation=activeAutomatable=noTechnical Impact=total,63030 记录 Exploitation=activeAutomatable=yesTechnical Impact=total。本文采用的 KEV raw catalog 版本是 2026.07.24,发布时间是 2026-07-24T17:40:56.0086Z。当前防守状态是“两项均已知利用”,CISA dueDate 分别为 63030 的 7 月 24 日和 60137 的 8 月 4 日。

KEV 条目与两份 active ADP 确立每项 CVE 的已知利用状态和政府处置日期。公开技术可复现性单独记录:当前没有一份公开、成功、可复放的 SQL 注入到持久化再到 RCE 完整 transcript,也没有证据说明 KEV 纳入所依据的事件走完了哪一层。资产处置按 KEV 与官方版本范围立即推进;单个事件仍按扫描、路由混淆、SQL 注入可达性、RCE 与失陷五层证据分类。

4 修复要同时通过代码性质与运行态验收

4.1 分支决定要验证哪些性质

6.8 的验收对象是查询边界。用生产同源制品在隔离环境比较 6.8.5 与 6.8.6:普通整数数组、数字标量、非数字占位、重复和乱序列表应汇入同一整数语义;原始非数字文本从查询状态和 SQL 名单消失;合法作者过滤结果保持一致;外层空值与进入分支后解析为空的路径都不生成排除条件或对应写回。6.8.6 中两处额外 REST 变化属于固定树事实,验收记录继续按公告范围把 6.8 只归入 CVE-2026-60137。

6.9 与 7.0 还要验证批次位置和 dispatch 所有权。进程内夹具让一个准备阶段错误位于可区分的正常成员之前,固定构建应保持原响应数量,并让每个错误、空占位和正常结果留在自己的位置;若测试能观察内部状态,$matches$validation 对同一项目应有相同索引。另一组对照在内部 dispatch 活跃时调用顶层集成入口与服务器入口,固定构建分别提前结束和返回 false;dispatch 空闲时的普通服务路径继续工作。

历史固定模板 9e6cb912c9d4df492b68ac0ecf8c333e2357de06 只能作为隔离、明确授权环境中的 SQLi 前半链比较。受影响的 6.9.4 或 7.0.1 基线预期命中完整三请求 flow,6.9.5 或 7.0.2 预期不命中;阳性支持测试布局下的定时型盲 SQL 注入可达性。7 月 22 日的 false-negative 记录约束历史阴性:保存三组原始请求与响应、两次条件观测时长、第三请求是否真正执行、目标制品、Nuclei 与模板版本、模板摘要、操作者、时间和网络条件后,阴性仍只是一轮未匹配。

当前模板应固定在 d51e9a38ae587ccdf7a75fe6aa0e11c81e7d7972 单独比较 route-confusion 行为。受影响基线预期通过 WordPress GET 前置门,并在批处理 POST 中同时得到 HTTP 207、JSON、block_cannot_read 和缺少 rest_term_invalid;固定基线预期不满足完整 matcher 集。当前阳性只支持路由混淆行为,当前阴性只是一轮不匹配;SQLi 层仍需历史模板阳性或其他直接证据。保存 GET 与 POST 的完整响应、四项 matcher、目标制品、Nuclei 与模板 ref、操作者、时间和网络条件。SOSEC 尚未执行本地回归或两代主动模板,本文给出的两套验收设计都保持“未执行”;任何外部资产都须先取得明确授权。

代码性质测试通过只说明被测制品满足所选性质。生产关闭还需要把同一制品送到每个真实服务单元,移除受影响副本、扩容模板和回滚镜像。当前模板阳性进入路由混淆调查,历史模板阳性进入 SQLi 调查;两种阴性都保留模板身份与运行条件,并停在一次未匹配。修复结论来自固定制品与运行态验收,影响范围来自官方版本记录。版本、代码性质、部署覆盖和两代模板证据应分别记录,最后在同一资产行上汇合。

4.2 完整发行版、实际服务单元和回滚源要指向同一身份

三条维护线以不同版本控制对象交付修复。7.0 使用三个独立分支回移,6.9 与 6.8 使用成组回移,固定标签又各有独立尖端。站点操作者应取得完整维护发行版;下游发行商若重写提交身份,需要给出基础分支、上游修补到本地源码的映射、构建身份和支持路径。手工复制一处显眼差异会丢失同组修补、分支上下文和以后可追溯的发布来源。

资产记录应把源码或标签身份、取得的包或镜像、部署编号和运行实例分开。后台版本字符串帮助初步定位;每个节点实际加载的代码还要由运行证据说明。不可变镜像环境列出所有活跃副本及镜像摘要;传统 PHP 或 PHP-FPM 环境先检查发布切换、worker 生命周期、预加载与 OPcache 时间戳策略,再执行实际需要的失效、重载或重启。通过条件是每个能接请求的单元都绑定固定制品,未知或受影响单元已经离开服务池。

缓存一词在这里至少指三种对象。WordPress 对象缓存保存应用对象与查询结果;PHP OPcache 保存编译代码和可能的预加载状态;CDN 缓存保存边缘响应。三层分别处置,清理结果只对本层成立。对象缓存状态用于解释 Cloudflare 的部署条件,OPcache 策略用于判断新文件何时进入运行态,CDN 清理用于内容交付;漏洞关闭依赖固定核心制品和真实服务单元。

发布可以从隔离副本进入金丝雀,再进入全部服务池。每波绑定同一摘要或不可变镜像,记录计划与实际实例、开始与结束时间、业务回归、REST 行为、查询结果、应用错误、回滚目标和批准人。某波失败时停止扩大,保留已经验证为固定且兼容的回滚目标。旧快照若需作为证据保存,应隔离并标成不可部署;自动伸缩、灾备和托管面板恢复源全部更新后,固定版本才能延伸到下一次扩容或恢复。

米色纸张上,证物袋、信封与账页、齿轮和线轴、圆柱资料库与玻璃瓶、节点图与转轮排列成一行,底部多色线缆汇向橙色文件托盘,一只手用放大镜检查接点。
图 3。升级证据从分支目标进入可信制品和运行实例,同时保留事件调查材料;临时边缘控制拥有独立的起止时间,核心升级承担最终关闭。

5 用一份台账完成有限、可撤销的关闭

5.1 第一小时、升级、调查和撤除共用同一资产行

站点级台账应成为唯一权威工作面。它把第一小时范围判断、临时控制、制品部署、运行验收、事件调查、例外与最终撤除排成一个顺序,同时保留两个结论:已知软件条件是否退出生产,以及既定证据源是否支持利用或失陷。自动更新通知、WAF 仪表盘、后台版本页和单个节点截图都可以成为附件;任何一个附件都不单独把资产推进到“关闭”。

阶段必须记录通过条件失败或例外撤除或关闭
范围与保全 站点、规范域名、分支、版本、供应商构建、外网状态、缓存状态、服务单元、负责人、适用 KEV dueDate 与逾期状态;已有边缘、部署、管理员和主机材料的时间窗、时区、导出时间与摘要 每项资产进入明确的受影响、固定、官方范围外或待验证状态;CISA 适用日期和内部截止时间已落到负责人;原始材料保持只读来源,分析副本另行生成 未知版本进入小时级验证队列;越过适用 dueDate 的资产记录批准人、原因和新的完成时间并启动暴露窗口调查;缺失遥测按缺失记录 范围状态只在版本与构建证据出现后变更,不能靠未找到版本字符串自动退出
临时降暴露 规则执行层、两种批处理路由在该层的实际表示、匿名与已认证行为、业务影响、规则身份、负责人、开始时间与到期日 无法立即升级的 6.9/7.0 匿名请求在目标执行点被限制,合法必要流量按已批准策略工作,源站关联证明规则真正生效 rewrite、编码、路由变化、WAF 失效或业务中断触发升级处置;例外逐日复核,不改名为固定 所有服务单元固定并完成金丝雀回归后,以独立变更撤除规则并保存结束时间
制品与 rollout 分支目标、来源、摘要或签名、镜像或部署身份、波次、实例、健康结果、KEV 日期、逾期例外、固定回滚目标和批准人 可信制品按隔离、金丝雀、全量顺序进入服务池,每波结果可关联到具体实例 某波失败停止扩面,修复兼容或配置问题;回滚只指向已知固定构建 受影响包、镜像、快照、扩容模板和恢复源退出可部署集合
运行与代码验收 每个服务单元的实际制品;6.8 查询对照;6.9/7.0 查询、批次位置与 dispatch 对照;历史 9e6cb91 三请求、时长、第三请求执行状态与 issue #16629 限制;当前 d51e9a3 GET/POST、四项 matcher;环境、原始结果与复核人 所有请求服务单元加载固定代码,分支适用性质和普通业务回归通过;当前阳性标为 route-confusion,历史阳性标为 SQLi,两种阴性只保存在补充字段 代码或业务对照失败证明验收未通过;当前模板阳性启动路由混淆调查,历史模板阳性启动 SQLi 调查;阴性不改变版本与制品状态 运行态、回滚源和验收记录同时完整后,软件修复线可签字
事件调查 KEV 已知利用状态;60137 的 active/no/total 与 63030 的 active/yes/total ADP;请求、数据库、文件、进程、网络与身份数据范围;关联键、基线、授权变更和时间窗;扫描、route-confusion、SQLi、RCE、失陷中的当前层级 每项异常都能与相邻数据源、正常发布或管理员活动比较;KEV 负责总体利用状态,资产证据负责具体链层;结论写清数据源与时间边界 可靠的非预期执行或未授权访问触发既有隔离、保全、凭据和扩大关联流程;具体文件、账户或数据库对象只从事实产生 调查可以在软件修复后继续;结案写成既定数据源在既定窗口内支持或未支持哪些结论
签字与复盘 临时规则起止、KEV dueDate 完成或逾期说明、开放例外、修复与调查结论、资产所有者、安全复核人、证据保留位置和期限 新复核人无需询问原处置者,就能重建范围、制品、实例、控制、调查与决定 任何只能依赖聊天回忆、范围不明截图或供应商口头承诺的格子保持开放 两条工作线分别签字;未来出现新的公开尾链验证或现场证据时重新开启相应结论

5.2 软件修复与失陷调查分别收口

软件修复线在以下事实同时成立时关闭:资产位于正确的固定分支,可信制品覆盖每个请求服务单元,适用代码性质与业务行为通过验收,旧制品无法从回滚、扩容或灾备路径返回,临时规则已经按计划撤除。扫描量下降、WAF 零命中、后台显示新版本或任一模板单次阴性都只是局部观察。issue #16629 记录历史三请求模板的漏报,7 月 24 日因 PR #16658 的 route-confusion 替换而关闭;上游检测流程由此更新,站点仍须完成版本、制品和运行态验收。供应商等价回移也可以关闭软件线,但它必须提供可审计的来源与构建身份。

事件调查线根据既有数据范围独立关闭。KEV 与两份 active ADP 支持“两项 CVE 存在已知利用”的总体判断;边缘访问与 WAF 动作支持具体资产上的扫描或尝试;当前 #16658 阳性支持该请求布局下的路由混淆行为;历史 #16596 完整阳性 flow 支持盲 SQL 注入可达性;服务器实际执行非预期代码支持 RCE;未经授权的数据访问、执行或控制支持失陷。两代模板阴性都停在“一次未匹配”,历史阴性还带有已记录的漏报边界,暴露窗口保持原范围。关闭语句要写清模板世代、复核的数据源、时间窗和缺失点。

WordPress 在 7 月 17 日交付的三处修补最终恢复了三项朴素规则:错误子请求在并行状态中保持原位置,内部子请求留在拥有它的 dispatch 周期,进入作者排除 SQL 名单的值先成为整数。6.8.6 需要确认第三项;6.9.5 与 7.0.2 需要确认三项。60137 的 active/no/total、63030 的 active/yes/total ADP 与 KEV 决定当前利用状态和处置时限,WordPress 组合 RCE 决定产品后果,当前 #16658 阳性决定路由混淆层,历史 #16596 阳性决定公开 SQLi 前半链,issue #16629 只限定历史阴性,未验证尾链限定具体事件结论。对应动作是按期或逾期升级、验证运行制品、按模板世代扩大到正确调查层、保留两种阴性未决,并用有限措辞结束具体事件。

研究记录

6证据、对象与来源

下面保留本文实际使用的标识、时间和原始材料,便于继续调查。

6.1研究对象

报告涉及的产品、行为者、技术、受影响对象和控制点。

受影响版本WordPress 6.8.0–6.8.5

仅 CVE-2026-60137 的官方范围;首个修复版本为 6.8.6。

受影响版本WordPress 6.9.0–6.9.4

两项 CVE 的官方重叠范围;首个修复版本为 6.9.5。

受影响版本WordPress 7.0.0–7.0.1

两项 CVE 的官方重叠范围;首个修复版本为 7.0.2。

查询修补性质外层非空门 + wp_parse_id_list() + 解析后非空门

PHP 语义中的空值先跳过;进入分支的字符串或数组统一整数化,只有解析后非空的名单进入查询条件。

REST 修补性质槽位对齐 + dispatch 重入守卫

错误项目在两列保留同一位置,活跃 dispatch 拒绝新的顶层服务周期。

批处理路由形式/wp-json/batch/v1 | ?rest_route=/batch/v1

Searchlight 把两种形式列为临时 WAF 目标;ProjectDiscovery 历史 #16596 与当前 #16658 都以 POST /?rest_route=/batch/v1 发出检测请求。

历史 SQLi 检测输入9e6cb91: /wp/v2/categories?author_exclude=… → author__not_in

历史三请求模板利用批处理位置冲突,让公共 REST 参数进入 posts controller 的查询映射。

历史 SQLi 检测阳性HTTP 207 + parse_path_failed | HTTP 207 + JSON + 耗时 ≥ 7 秒

完整三请求 flow 支持测试布局下的盲注可达性;模板未计算 control 与 true 组的时长差,证据上限止于 SQL 注入可达性。

历史 SQLi 检测转折2026-07-22 issue #16629 → 2026-07-24 PR #16658

报告记录第三个 SQLi 请求在部分条件下没有执行;issue 随 route-confusion 替换以 completed 关闭,历史阴性只记录一次未匹配。

当前路由混淆检测d51e9a3: HTTP 207 + JSON + block_cannot_read + !rest_term_invalid

两请求模板先识别 WordPress,再发送无 SQL、无 timing 的批处理探针;阳性证据上限是 route-confusion 行为。

CISA KEV 状态两项 CVE 于 2026-07-21 加入 KEV

CVE-2026-63030 dueDate 2026-07-24,CVE-2026-60137 dueDate 2026-08-04;本文绑定 catalogVersion 2026.07.24。

CISA ADPCVE-2026-60137: active / no / total

SSVC 依次记录 Exploitation、Automatable 与 Technical Impact;时间戳为 2026-07-21。

CISA ADPCVE-2026-63030: active / yes / total

SSVC 依次记录 Exploitation、Automatable 与 Technical Impact;时间戳为 2026-07-21。

部署调查字段持久对象缓存状态

Cloudflare 对其公开的 6.9+ 匿名路径附加的条件;用途限于解释部署,修复仍依赖固定发行版。

6.2事件时间

  1. 查询形状回归进入 trunk

    changeset 59766、Git 提交 c22e267ccae50b45e9ae6e4b1e55ce68c408f842 在缓存键整理中引入数组与标量的不一致处理,首次随 6.8.0 发布。

  2. 批次槽位不对称进入 trunk

    changeset 60635、Git 提交 880bb48c1865b539925d901e4ddb4786457e3d05 调整错误处理,首次随 6.9.0 发布。

  3. WordPress 发布修复;CISA 最初状态仍为 none

    6.8.6、6.9.5 与 7.0.2 交付对应维护分支修补,WordPress 建议立即更新并启用强制自动更新;两项 CVE 当日较晚的 CISA SSVC exploitation= none 只代表转折前的历史状态。

  4. 协调披露公开

    Searchlight 报告默认无插件安装的匿名结果并保留细节;Cloudflare 公开其缓存条件与 WAF 防护判断。

  5. 三请求公共 SQL 注入检测器合并

    ProjectDiscovery 合并 PR #16596,以三请求 flow 检测 POST /?rest_route=/batch/v1 ;阳性 matcher 支持盲注可达性,证据上限止于该前半链。

  6. 公共实现尝试走完后续链

    98716c82d2fe9b84ff15e5f6e7aa90d30927d602 加入 oEmbed/customize 相关行重用、管理员创建与登录、插件上传与激活、命令输出处理代码;提交没有附带成功 transcript 或 CI 结果,SOSEC 未运行,本次核查没有采纳独立复现。

  7. 报道出现具名在野观察主张

    BleepingComputer 转述 Benjamin Harris 与 watchTowr 的“最初迹象”主张;报道没有提供遥测、IOC、受害者、请求分类或成功结果,SOSEC 无法把观察归为扫描、尝试或成功利用。

  8. 两项 CVE 加入 CISA KEV,两个 ADP 都转为 active

    CISA raw catalog 把 CVE-2026-60137 与 CVE-2026-63030 列为已知利用,dueDate 分别为 8 月 4 日与 7 月 24 日;60137 的 ADP 记录 active/no/total,63030 记录 active/yes/total。

  9. 历史三请求 SQLi 模板被报告多起漏报

    PR #16596 评论与 issue #16629 记录第三个 SQLi 请求在部分条件下没有执行;该记录限定历史 9e6cb91 模板的阴性解释。

  10. route-confusion 模板替换 timing SQLi flow

    ProjectDiscovery 合并 PR #16658(head 5d14aeb15ba2ba90ebcffa97723b63150658a97d ),issue #16629 以 completed 关闭;固定 main ref d51e9a38ae587ccdf7a75fe6aa0e11c81e7d7972 的两请求模板不执行 SQL,也不使用 timing。

6.3来源与材料

  1. WordPress 7.0.2 安全发布公告https://wordpress.org/news/2026/07/wordpress-7-0-2-release/
  2. WordPress 7.0.2 版本文档https://wordpress.org/documentation/wordpress-version/version-7-0-2/
  3. WordPress 官方发行归档https://wordpress.org/download/releases/
  4. WordPress 仓库 CVE-2026-60137 公告https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-fpp7-x2x2-2mjf
  5. WordPress 仓库 CVE-2026-63030 公告https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-ff9f-jf42-662q
  6. CVE-2026-60137 CNA 与 ADP JSONhttps://cveawg.mitre.org/api/cve/CVE-2026-60137
  7. CVE-2026-63030 CNA 与 ADP JSONhttps://cveawg.mitre.org/api/cve/CVE-2026-63030
  8. NVD 的 CVE-2026-60137 条目https://nvd.nist.gov/vuln/detail/CVE-2026-60137
  9. NVD 的 CVE-2026-63030 条目https://nvd.nist.gov/vuln/detail/CVE-2026-63030
  10. NVD API 的 CVE-2026-60137 记录https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-60137
  11. NVD API 的 CVE-2026-63030 记录https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-63030
  12. Searchlight Cyber wp2shell 协调披露https://slcyber.io/research-center/wp2shell-pre-authentication-rce-in-wordpress-core/
  13. Cloudflare WordPress 漏洞协调防御说明https://blog.cloudflare.com/wordpress-vulnerabilities/
  14. WordPress WP_Object_Cache 官方文档https://developer.wordpress.org/reference/classes/wp_object_cache/
  15. 7.0 分支 REST dispatch 修补https://github.com/WordPress/wordpress-develop/commit/85015b84fbc52bf6151a691299896b8971772594
  16. 7.0 分支批次错误槽位修补https://github.com/WordPress/wordpress-develop/commit/c8bdf1fa12355f79db94054d307d0e3898b501c9
  17. 7.0 分支作者排除名单修补https://github.com/WordPress/wordpress-develop/commit/74d37a344cbf28e9187a1a5ca71b33d186bcd333
  18. 6.9 分支成组回移https://github.com/WordPress/wordpress-develop/commit/6f2074dda61864a03f334d70414d1690ce7e5c79
  19. 6.8 分支成组回移https://github.com/WordPress/wordpress-develop/commit/c62f8c47314727184124b1227a00ee2eef546231
  20. r59766 对应的查询历史提交https://github.com/WordPress/wordpress-develop/commit/c22e267ccae50b45e9ae6e4b1e55ce68c408f842
  21. r60635 对应的 REST 历史提交https://github.com/WordPress/wordpress-develop/commit/880bb48c1865b539925d901e4ddb4786457e3d05
  22. WordPress 6.8.5 易受影响标签提交https://github.com/WordPress/wordpress-develop/commit/a1b6ae4c8e7de4b24c2495c29aef5045338e088d
  23. WordPress 6.8.6 固定标签提交https://github.com/WordPress/wordpress-develop/commit/c4ee97a868846af918b8f461b90f333687a8a81f
  24. WordPress 6.9.4 易受影响标签提交https://github.com/WordPress/wordpress-develop/commit/074792ef21d9160a8fabdda215f8bf48f7a91d43
  25. WordPress 6.9.5 固定标签提交https://github.com/WordPress/wordpress-develop/commit/22cfe2318f19f42e1d15a9a49e9db9f010f3afe6
  26. WordPress 7.0.1 易受影响标签提交https://github.com/WordPress/wordpress-develop/commit/ca02900921c1167a1abcceeab493e2117c94d4c5
  27. WordPress 7.0.2 固定标签提交https://github.com/WordPress/wordpress-develop/commit/855551c4477bd5a0407221c57dae123c4163b434
  28. 7.0.2 固定 REST 批处理源码https://github.com/WordPress/wordpress-develop/blob/855551c4477bd5a0407221c57dae123c4163b434/src/wp-includes/rest-api/class-wp-rest-server.php#L1746-L1848
  29. 7.0.2 固定 WP_Query 源码https://github.com/WordPress/wordpress-develop/blob/855551c4477bd5a0407221c57dae123c4163b434/src/wp-includes/class-wp-query.php#L2399-L2416
  30. 7.0.2 固定列表与整数名单解析源码https://github.com/WordPress/wordpress-develop/blob/855551c4477bd5a0407221c57dae123c4163b434/src/wp-includes/functions.php#L4979-L5010
  31. 7.0.1 固定 REST author_exclude 映射源码https://github.com/WordPress/wordpress-develop/blob/ca02900921c1167a1abcceeab493e2117c94d4c5/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php#L239-L270
  32. WordPress Posts REST API 官方参考https://developer.wordpress.org/rest-api/reference/posts/
  33. WordPress Categories REST API 官方参考https://developer.wordpress.org/rest-api/reference/categories/
  34. ProjectDiscovery 未合并提案 16595https://github.com/projectdiscovery/nuclei-templates/pull/16595
  35. ProjectDiscovery 历史三请求检测模板 PR #16596https://github.com/projectdiscovery/nuclei-templates/pull/16596
  36. ProjectDiscovery 历史 9e6cb91 SQLi 模板https://github.com/projectdiscovery/nuclei-templates/blob/9e6cb912c9d4df492b68ac0ecf8c333e2357de06/http/cves/2026/CVE-2026-63030.yaml
  37. ProjectDiscovery 历史 SQLi 模板漏报 issue #16629https://github.com/projectdiscovery/nuclei-templates/issues/16629
  38. ProjectDiscovery route-confusion 替换 PR #16658https://github.com/projectdiscovery/nuclei-templates/pull/16658
  39. ProjectDiscovery #16658 head 提交https://github.com/projectdiscovery/nuclei-templates/commit/5d14aeb15ba2ba90ebcffa97723b63150658a97d
  40. ProjectDiscovery 固定 d51e9a3 当前 route-confusion 模板https://github.com/projectdiscovery/nuclei-templates/blob/d51e9a38ae587ccdf7a75fe6aa0e11c81e7d7972/http/cves/2026/CVE-2026-63030.yaml
  41. 7 月 18 日固定公共 wp2shell 实现提交https://github.com/sergiointel/wp2shell-poc/commit/98716c82d2fe9b84ff15e5f6e7aa90d30927d602
  42. 转述 watchTowr 具名观察主张的 BleepingComputer 报道https://www.bleepingcomputer.com/news/security/wordpress-core-wp2shell-rce-flaws-get-public-exploits-patch-now/
  43. CISA 当前 KEV raw cataloghttps://raw.githubusercontent.com/cisagov/kev-data/develop/known_exploited_vulnerabilities.json