三天 12 条 PHP 相关 CVE,没有一条出在 PHP 本身

我在 NVD 里按 PHP 关键词拉了 10 月 19 到 21 日的通告,12 条全是插件、CMS 和库的问题。这比"PHP 又有漏洞了"更值得警惕,因为它说明你的风险清单根本不在语言上。

今天 PHP 要发两个 9.2 的修复(前一篇写了怎么应对)。写完之后我顺手查了另一件事:过去三天,NVD 上跟 PHP 相关的 CVE 到底长什么样。

结论有点反直觉:12 条里没有一条是 PHP 语言或运行时的漏洞,全部落在插件、CMS 和第三方库上。

我查到的 12 条

按 NVD 的公开时间排(10 月 19 日到 21 日,关键词 PHP):

编号 目标 问题
CVE-2026-82814 Duplicator / Duplicator Pro(WordPress) PHP 对象注入,≤1.5.17 与 ≤4.6.10
CVE-2026-111829 WP Mailster(WordPress) 远程文件包含
CVE-2016-20101 Issuu Panel(WordPress) 未授权文件包含,<1.6.6
CVE-2026-113402 ArmorX Spam 本地文件包含,需登录
CVE-2026-111862 Rank Math SEO PRO 供应链投毒:3.0.123 的部分安装包
CVE-2026-113356 DokuWiki 草稿内容进 unserialize,PHP 对象注入
CVE-2026-112777 Craft CMS Twig 的 create() 黑名单大小写绕过
CVE-2026-112291 Flarum 扩展管理器 接口缺鉴权与管理员校验
CVE-2026-112302 kiwilan/php-archive zip 解压路径穿越
CVE-2026-112307 sqlparse 通过 SQL 文本注入 PHP 表达式
CVE-2026-112368 MongoDB PHP driver BSON 解码无限递归
CVE-2026-113388 opensource-socialnetwork 后台入口的输入处理

把窗口从 10 月 14 日拉开,同一个关键词是 77 条。三天的样本小,但结构很稳定:绝大多数是 WordPress 插件。

三类漏洞在三天样本里的分布

文件包含、对象注入、供应链——三类问题占了样本的绝大多数,没有一条需要“语言本身有 bug”。

它们其实是四类老问题

文件包含(4 条)。插件为了“支持自定义模板”,把用户可控的值拼进 include。修法从来不是加过滤,而是不要用可变路径去 include。

对象注入(2 条)。unserialize() 吃进了不该吃的东西——DokuWiki 是草稿文件内容,Duplicator 是备份数据。PHP 对象注入的可怕之处在于它会触发 __destruct / __wakeup,等于把类库里的每一个魔术方法都变成了入口。

供应链(1 条)。Rank Math SEO PRO 的 3.0.123 有一部分安装包被投毒。这条最难受:你什么都没做错,更新了一个付费插件的正常版本。

缺鉴权 / 越权(2 条)。扩展管理器的接口忘了 is_admin,后台功能忘了校验角色。

为什么“核心很少出事”这件事有结构性原因

PHP 核心有固定的发版节奏和一支专职安全团队:漏洞走私有流程修,修完统一发版,发版前还会提前预警(今天这条就是)。你看到的公告格式统一、版本号清晰、分支覆盖完整。

插件生态没有这些东西。一个插件可能只有一个维护者、两年没更新、还在几十万个站点上跑;它的更新不是安全版本,而是“顺手带了点新功能”。同一门语言,两个完全不同的风险模型。

所以“我 PHP 升到最新了”这句话的安全价值,远小于“我知道自己装了哪些插件、哪些还在维护”。

我今天会做的四件事

  1. 列清单:把所有插件/CMS 模块的版本导出来,和 NVD 的关键词对一遍。WordPress 用 wp plugin list 一条命令就能拿到。
  2. 删掉不用的:停用不等于删除,停用的插件代码还在磁盘上,文件包含类漏洞照样能打到它。
  3. 文件系统只读:Web 根目录对 PHP 进程只读,能挡掉一大票“上传后执行”和“写入模板”的利用链。这条对 Duplicator 那种需要写临时文件的插件会有影响,要单独放行目录。
  4. 自动更新分层:安全更新自动打,功能更新人工看。反过来做的人,通常在一次大版本更新后花两天回滚。

一句判断

语言层的漏洞可怕在“你无处可躲”,生态层的漏洞可怕在“你不知道自己有多少个入口”。前者一年几次、有公告;后者每天几十条、没有公告。真正该自动化的是后者。

← 返回文章列表

评论

…