AI 挖出 PHP 十余年老洞,补丁却在人手里卡了两年
10 月 21 日 14 时(UTC)是 PHP 项目定好的发布时刻。当天早上 7 时 41 分,容器镜像厂商 Chainguard 单方面打破 embargo,把已经打好补丁的构建镜像发了出去。PHP 基金会在复盘公告里点了它的名,说这无视了多方为协调披露所做的数周工作。镜像里带着修复后的二进制,谁都能照着补丁反推洞在哪,而其他人还得再等六个多小时才有正式版本。
要修的是两个洞,编号 CVE-2026-109618 和 CVE-2026-109619,CVSS 最高 9.2。第一个出在内存耗尽的处理上。一个请求撞上内存上限的时刻如果不巧,PHP 会留下初始化一半的内部数据,后面当有效数据接着用,内存就此被污染。第二个是致命错误留下的陈旧全局状态,同一个 worker 处理下一个请求时会用上已释放的内存。Wiz 把它们串成 php2shell 利用脚本,在 WordPress、Drupal、Joomla 三个项目的官方最新容器镜像上,无需认证就拿到了远程代码执行。Wiz 的口径是过去十年发布的每个 PHP 版本至少中一个,往前一直算到 5.4。修复版本是 8.5.12、8.4.27、8.3.36 和 8.2.35。
发现它们的是 AI。安全公司 Calif 7 月 30 日开始在 OpenAI 的 Patch the Planet 计划下审 PHP,8 月 11 日研究员 Ryan A 报了一个无条件远程代码执行,根因和 2024 年那次外部审计里露头的内存耗尽问题相同。Wiz 那边 8 月 19 日靠自家 Atlas 加上 Gemini 4 Argon 与 GPT-5.6 Sol 找到第一个洞,8 月 24 日报给 PHP 安全团队。OpenAI 也独立报了同一根因,9 月 18 日又补了更多攻击路径。
AI 这次改变的是能不能把躺了十多年的洞变成打得出去的攻击。Wiz 博客写道,要证明这些洞可利用,得串起多个缺陷并针对每个目标反复调试,复杂程度处在人类研究员实际能做到的边缘;现在一名研究员用一周做完了过去一支世界级团队几个月的事。PHP 基金会的表述与此一致。2024 年那次外部审计里,一位核心开发者在修另一个问题时已经看到苗头,当时只推演出理论上可以利用,没找到具体路径,同期还有几个影响更明确的洞抢在前面,事情就搁下了。

难点从一开始就摆在修这一侧,基金会这篇复盘写得比常见的事故通报直白。修内存耗尽问题有好几套方案,每套都带代价,要么破坏向后兼容,要么引入新的拒绝服务面,还有一套要大批第三方扩展跟着改,根本协调不动。安全团队按共识做决定,谁也不愿承担选错的后果,加上懂引擎深处的人就那么几个,手上还压着别的活,修复工作在几个月里停了又起。基金会直接写下这么一句,延误是一次结构性失败,由安全团队的决策流程和它缺少资源共同造成。
8 月 11 日之后这件事才变成最高优先级。基金会的人连着几个周末昼夜轮转地协调各方,它说没有这笔经费就不可能让好几个人全职扑在一件事上。同一篇博客里还有一组数字,7 月 1 日以来 PHP 发出了 15 个 CVE,同时处理掉一百多份判定为无效、重复或无法复现的报告。AI 帮着验证报告、把同源的归类,但每一个判断和每一行补丁仍由人来做。这段话之后基金会开口要钱,理由是要培养更多通读整个 PHP 代码库的工程师。找洞的工具跑得越来越快,能拍板怎么修的人没跟着涨。
窗口的另一头是披露纪律。原本定的发布时刻是 10 月 22 日 14 时(UTC)。10 月 20 日 15 时前后,两个 CVE 编号开始在论坛和社交平台流传,带着错误的发布时间和错误的 CVSS 10.0 评分,技术细节没泄露。PHP 项目把预告提前到当天 19 时 30 分,发布提前一天。当晚 20 时左右,Calif 误发一段视频,画面是它的验证代码打若干目标,泄露了少量额外细节,删除后的拷贝很快传开,各种利用代码的开发随之加速。基金会说截至发布时它没看到能打成的攻击,亚马逊的说法谨慎得多。它的蜜罐网络在 10 月 17 日就记录到最早一次尝试,来源 IP 挂在一个商业匿名网络上,公布前几小时又来了更多次,载荷与匿名设施各不相同,怀疑不止一人参与。亚马逊不清楚对方怎么提前拿到信息。

把这几件事放在一起看,OpenAI 讲的防御者窗口,长度不由发现方决定。OpenAI 在 10 月 21 日的公告里说,前沿 AI 赶在攻击者之前找到了这些洞,给维护者和安全厂商开出一个准备修复与防护的窗口。这个说法有个前提它也写在同一篇里,分销商和服务商需要时间准备更新与防护,如果前沿能力与广泛可得的能力差距不大,这段时间会很短。这次从 8 月 11 日报告到 10 月 21 日发布有七十天,泄密之后留给大多数人的时间只剩几个小时。Cloudflare 首席执行官 Matthew Prince 在 X 上写道,公开前十小时全网数千次尝试,公布后 45 分钟涨到数万,两小时后数十万,发帖时过百万。到 10 月 22 日,Wordfence 防火墙挡掉了七万四千多次尝试,在它保护的五百多万个站点上没有一例确认被攻破。
下线是并行的另一条线。荷兰关掉全国数字身份系统 DigiD、政府门户和众议院网站;法国关掉巴黎警察局官网等一批地方政府站点;日本财务省、气象厅、国税厅各自暂停部分服务,野村与三菱日联也停了一部分。芬兰国家 IT 服务商 Valtori 关了一天政府网站后连夜打补丁,总干事 Hannu Naumanen 说恢复要几天甚至几周,因为更新之外还得测试。德国 BSI 与美国 CISA 都建议修不了就先下线。
尾巴留在那些不打算动的系统上。漏洞情报公司 VulnCheck 统计,至少一百万台对外服务的主机跑在已拿不到更新的 PHP 版本上。德国数字行业协会 Bitkom 的安全负责人 Felix Kuhlenkamp 对路透社说,很多小机构跑着一个 PHP 网站,并不怎么盯着。补丁已经放在那里了,能把它装上去的人还没跟上。