开源建站系统 WordPress 官方代码仓库日前正式披露了一处关键安全更新,针对核心页面模板解析机制中的未授权路径遍历漏洞推送补丁。官方主分支紧急发布 WordPress 7.1.2,并将补丁破例向后回溯至 4.7.37,跨度覆盖了多达 25 个历史分支。该漏洞由安全研究人员 Robert Ressl 负责任披露,漏洞编号确定为 CVE-2026-87902,CVSS 评分为 9.2 分,缺陷类型归属于 PHP 文件包含(CWE-98)。
从评级上看,这是一个无需身份验证、无需用户交互即可通过网络发起的最高等级警报。但这场跨越十年的大面积救火并非全网无差别沦陷的灾难片,而是一面镜子:它一方面照出了攻击者在特定配置下将路径遍历转化为代码执行的严苛门槛,另一方面更照出了 WordPress 坚守二十年的原生 PHP 模板体系在面对现代 Web 安全挑战时的结构性代价。
穿透模板解析链条的路径遍历漏洞
漏洞的直接病灶位于核心文件 wp-includes/template.php 内。在典型的页面请求生命周期中,WordPress 会依赖 get_page_template() 函数按层级自顶向下检索可用模板。系统虽然早已部署了 validate_file() 函数用于检验显式声明的模板文件名,但在处理由页面别名(page slug)派生并送入模板定位流程的路径参数时,解析逻辑未能正确拦截目录遍历序列。
攻击者无需获取任何站长或用户权限,即可通过特制请求让模板解析机制跳出当前主题的根目录边界,强行包含服务器本地可读的任意 .php 文件。
这并不是 WordPress 第一次在此类逻辑上失守。早在 2019 年发布的 5.2.4 版本中,官方就曾修复过相似的模板路径遍历问题。此类缺陷反复出现的核心症结,在于 WordPress 对页面别名、动态路由和本地物理文件定位的深度耦合。一旦中间过滤层出现微小疏漏,攻击者就能将合法的模板加载逻辑转变为任意文件的包含入口。
被放大的恐慌与条件受限的攻击链
在公网披露初期,该漏洞对应的 GitHub 安全公告曾一度出现短暂的访问异常与同步延迟,部分安全平台也未第一时间建立特征库。这种信息真空迅速在运维社区滋生恐慌,许多人误以为只要没有打补丁的 WordPress 站点均可被一键植入后门。
然而官方报告与披露细节给出了清晰的定性:这是一个条件触发型远程代码执行(Conditional RCE)。要将路径遍历升级为服务器接管,外部攻击必须跨过极为苛刻的环境门槛。
利用链条成立的第一道筛子是主题结构。目标站点使用的主题必须包含以特定字符开头的顶层目录,这一特征涵盖了经典的 Twenty Twelve、Twenty Fourteen 以及 Neve、Hestia 和 Sydney 等部分主流第三方主题。第二道筛子是宿主环境,服务器必须预存一个可被 Web 进程读取且内容可被攻击者间接污染的本地目标。
在常见利用场景中,攻击者往往依赖经典扩展中的 pearcmd.php 脚本,并要求 PHP 环境开启 register_argc_argv 选项。尽管官方 Docker 镜像与老旧 cPanel 面板常年保留此配置,但在经过基线加固、严格禁止静态目录解析脚本的生产集群中,该漏洞大多只能止步于受限的本地包含阶段,无法完成远程代码执行。
- 提醒.单纯部署通用 WAF 拦截规则或停用特定主题无法实现终局防御,路径规范化绕过手段极易突破规则层,核心代码补丁仍是阻断漏洞利用的唯一可靠基准。
原生 PHP 模板的宿命与二十年技术债
官方在常规维护策略之外提供了多达 25 个旧版本分支的礼节性回溯支持,这在开源安全运营中堪称高规格护航。但这一善意举动的另一面,恰恰暴露了 WordPress 庞大生态里尾大不掉的升级惯性。
模板即代码的设计简化了早期生态门槛,却将现代解析的每一次失手直接推向执行层。
从架构演进的角度审视,WordPress 的安全焦虑很大程度上来源于其对原生 PHP 模板渲染机制的长期保留。与 Drupal 和 Craft CMS 等现代内容管理系统普遍转向 Twig 模板引擎不同,WordPress 允许视图模板直接执行原生 PHP 代码。
在 Twig 架构下,模板层与后端逻辑被严格沙箱隔离,且默认开启自动转义。即使模板解析器发生了目录定位错误,解析器读取到的也只是纯文本标记或受到严格限制的标签,根本无法触发底层服务器的原生进程指令。但在 WordPress 体系中,只要路径检查出现缺口,本地包含就会毫无阻碍地演化为代码执行。
这种架构差异带来的安全代价是显而易见的。对于全球数以千万计的站点管理员与运维托管商而言,当务之急是核验系统已顺利迭代至 7.1.2 或对应的向后兼容修复版本。但更为根本的防御动作,应当是重新审视宿主环境的基础设施基线:关闭不可信目录的脚本执行权、隔离运行时文件写入,才能在下一次模板逻辑出现裂隙时,为核心资产守住最后的防线。
