WordPress 在 2026 年 9 月修复了一个严重级别 9.2 的未认证路径遍历漏洞 CVE-2026-87902,影响从 4.7.0 到 7.1.1 的所有版本。攻击者无需登录即可让页面模板解析函数加载主题目录之外的 PHP 文件,在特定条件下直接升级为远程代码执行。请立刻确认版本并安排升级。
这个漏洞是如何被触发的
漏洞出在 get_page_template() 函数。这个函数负责为页面挑选模板文件,但处理模板路径时没有充分过滤目录遍历符号,攻击者构造特殊请求就能让它跳出当前主题目录,去包含服务器上其他位置的 PHP 文件。
该漏洞归类为 CWE-98,也就是 PHP 远程文件包含。整个过程不需要任何用户凭证,也不要求目标用户做任何操作。
哪些站点面临被攻击的风险
要成功利用这个漏洞,需要同时满足两个条件。
- 当前使用的子主题或父主题中存在以
page-开头的顶层目录,比如page-templates。官方的 Twenty Twelve、Twenty Fourteen 主题就有这个目录,Neve、Hestia、Sydney 等第三方主题也受影响。 - 服务器上存在一个攻击者选定的、Web 服务进程有权限读取的 PHP 文件。知名的 pearcmd.php PEAR 转 RCE 技巧可以在这里使用,前提是 PHP 配置中
register_argc_argv设为 On。
官方 Docker PHP 镜像默认满足这个条件,cPanel 默认配置在 PHP 8.5 之前的版本也满足。
为什么这个漏洞的破坏力这么大
未认证路径遍历本身已经能读取服务器上的敏感文件,但 CVE-2026-87902 真正危险的地方在于它可以升级为完整的远程代码执行。攻击者一旦让服务器执行自己选择的 PHP 文件,就能拿到站点的完全控制权。
CVSS v4 给出的评分是 9.2,机密性、完整性和可用性三项全部标为 High。这意味着未经授权的远程攻击者可以永久性地破坏整个系统。
怎么确认站点是否受影响并修复
如果你不确定自己的站点是否安全,按下面的顺序逐项排查。
- 登录 WordPress 后台,在更新页面确认当前版本号。只要低于 7.1.2 且属于 4.7.0 到 7.1.1 之间任何一个版本,就肯定受影响。
- 查看当前启用的主题目录,检查是否存在以
page-开头的顶层文件夹。如果用的是 Twenty Twelve、Twenty Fourteen 或者 Neve、Hestia、Sydney 这类主题,大概率存在。 - 检查服务器的 PHP 配置,确认
register_argc_argv的值。如果为 On,pearcmd.php 利用链就能打通。 - 立即升级到对应的修复版本。7.1.x 用户升到 7.1.2,其他分支按自己当前的主版本号选择对应修复版本,比如 6.8.10、6.7.9、6.0.16、5.9.18、4.9.33 等。修复版本已经覆盖到 4.7 分支的每一个小版本。
无法立刻升级时的缓解措施
有些站点没办法马上升级,可以先用下面的办法把风险压到最低。
- 把主题目录里所有以
page-开头的顶层文件夹改名或者移走,这个操作会直接破坏攻击者利用漏洞的前提。 - 在 PHP 配置文件里把
register_argc_argv设为 Off,然后重启 Web 服务。这样即使路径遍历成功,pearcmd.php 也没法把文件包含转成代码执行。 - 检查服务器上是否存在不必要的 pearcmd.php 文件,有的话直接删除或者限制其访问权限。
需要明确的是,这两个缓解措施都只是临时手段。它们没有修复 get_page_template() 本身的缺陷,攻击面依然存在。
常见问题
我的站点版本在受影响范围内,但用的主题没有 page- 目录,还需要处理吗?
需要。版本号在受影响范围内就说明代码存在缺陷,换一个含 page-templates 目录的主题就会暴露风险。升级到修复版本是唯一的根治办法。
共享主机上的多个 WordPress 站点会互相影响吗?
不会直接互相影响。这个漏洞的作用范围限于单个站点本身,但同服务器上其他站点如果版本也旧,需要逐一升级。
升级到 7.1.2 之后还需要做其他安全加固吗?
升级已经封堵了这个漏洞。不过建议顺手把 register_argc_argv 关掉,同时清理不需要的 PHP 工具文件。