如果手上跑着 WordPress,这两件事最好分开看一眼——它们是两个互不相干的东西,只升其中一个,另一个照样还在。
先说核心那个。CVE-2026-87902,CVSS 3.1 打到 8.1。问题出在 get_page_template() 解析页面模板那一步:一个没登录的人,能诱导它把主题目录之外、本机可读的某个 .php 文件也一起纳进来当模板用。真要到 RCE,还得凑齐服务器和当前主题上的几个前置条件,所以攻击复杂度标的是 High;可条件一旦对上,不登录就能在站上执行代码。NVD 把这条归进 CWE-98(PHP 远程文件包含),CISA 的 SSVC 直接标了 exploitation=active——也就是说,已经在被人利用了。
它影响的不是某一个版本,是一整排分支。NVD 记录的各分支修复起点大概是这些:
- 4.7 → 4.7.37
- 4.8 → 4.8.32
- 4.9 → 4.9.33
- 5.0 → 5.0.29
- 5.1 → 5.1.26
- 7.0 → 7.0.6
- 7.1 → 7.1.2
中间 5.2 到 6.9 每一行都跟着发了个维护版,就不一条条抄了。重点是:从 4.x 到 7.x 全都被办了,所以「我版本不算太老吧」这句话在这条上不管用。当前 7.1 线最新是 7.1.4,升到自己那条线的最新维护版就行。
自查(有 WP-CLI 最省事):
wp core version
# 没有 CLI,就直接读版本文件:
curl -s https://你的站点/wp-includes/version.php | grep wp_version再说插件那个。CVE-2026-85097,Bricksforge 这个插件,CVSS 9.8,未认证任意文件上传。链路比核心那条直白得多:提交表单时 temporaryFileUploads 参数里的 url 字段校验不到位——攻击者先调 bricksforge_regenerate_nonce 拿一个合法的 nonce,传一个 GIF/PHP 的 polyglot 文件上去(这一步 MIME 校验是能过的),再提交表单,让服务端记录的路径指向那个 GIF、而 url 字段以 .php 结尾。于是文件落到盘上就是一段能执行的 PHP。影响 ≤ 3.1.8.9,修在 3.1.8.10。
查一下自己装没装、什么版本:
wp plugin list --status=active | grep -i bricksforge
# 或后台「插件」列表里直接看 Bricksforge 那行两条为什么放一起说,是因为太容易被当成一回事。「WordPress 升到最新了」这句话,只挡住了核心那条;Bricksforge 是第三方插件,核心升不升跟它没关系,得单独去升。反过来也一样。前阵子 PHP2Shell(从公开到被打出真 shell 只隔了几天)和 Node.js 那边 Brotli 被写穿(以为是「只负责解压」的库,结果直接给 shell)也都是这个道理——站点安全的账,从来不是一句「把东西都升到最新」能结清的,得先知道自己装了什么、各自什么版本,再一个一个对。
来源:NVD(CVE-2026-87902 / CVE-2026-85097)、WordPress 官方安全公告 GHSA-7hp8-65ch-5whp、Patchstack / Wordfence 通告。

评论