信息安全

AI 挖出 PHP 十年老洞 波及七成网站

2 min read

你有没有过那种感觉:家里的智能音箱放了一首老歌,你随口说"下一首",它接住了;你换了个说法,它还是接住了。可你从来没想过,这东西凭什么听得懂。

我们生活里有一大批东西,是"一直在那儿"所以我们从来不问它怎么做到的。楼下的电梯、小区门口的闸机、你手机上那个两秒就打开的 App、公司的官网、挂号用的那个系统。它们不吵不闹,你只在它坏掉的那一天才会突然意识到它一直在。

10 月 21 日凌晨 5 点左右(美国太平洋时间),有一批人正在经历这种"突然意识到"。

一夜之间,70% 的网站需要打补丁

事情的起点是一个 Hacker News 上名为 petecooper 的账号。10 月 20 日,他发了一篇帖子,里面只写了两个编号:CVE-2026-109618 和 CVE-2026-109619。

他没有给出利用代码,没有给出技术细节。按规矩,这些东西要等到补丁准备好、同时发布的那一刻才公开——这叫"协调披露",是安全行业几十年攒下来的默契。目的是给守方留出时间准备,给攻方留不出时间。

但那篇帖子已经足够。它宣称这是两个 CVSS 10.0 的 PHP 远程代码执行漏洞,PHP 5 时代就中招,10 月 22 日披露。

PHP 是什么? 根据 W3Techs 的数据,全球已知服务端语言的网站里,69.7% 用的是 PHP。所有 WordPress 站点、所有 Drupal、所有 Joomla,包括维基百科背后的 MediaWiki。你打开的电商、论坛、博客、政府的小站、很多公司的内部系统——大概率都跑在它上面。

帖子发出几小时后,WatchTowr 确认了这两个编号确实在计划披露序列里。10 月 21 日 07:41 UTC,比原定时间早了六个多小时,网络安全公司 Chainguard 单方面打破了禁运期,把已经打好补丁的系统镜像发了出去——攻击者可以直接反编译,研究补丁里改了什么,而其他所有 PHP 用户还在等。PHP 官方还点名了另一家安全公司 Calif,10 月 20 日"误发"了一段泄露更多细节的视频。

漏洞提前泄了,补丁还没到。Cloudflare 的建议直接变成了:把 PHP 网站关掉。

十分钟内,攻击从几千次涨到几百万次

先感受一下那个数字。Cloudflare CEO Matthew Prince 在 X 上说:

"在公开宣布之前的 10 小时里,我们全网看到几千次尝试利用。公开宣布后的 45 分钟涨到几万次,2 小时内涨到几十万次,现在是几百万次。"

45 分钟,几万倍。

美国这边,圣路易斯联储关掉了它的数据网站 FRED——那是全世界经济学家和研究员查美国宏观数据的默认入口。中欧和欧洲一批政府、医院、公共服务的网站直接下线。有人早上打开自己公司的官网,发现是一片 Apache 默认页。

AWS 的威胁情报团队后来披露了一条更早的线索:他们在 10 月 17 日就从一个蜜罐里抓到了针对 PHP2Shell 的利用尝试,比公开披露早了四天,来源 IP 属于某个商业匿名网络。换句话说,攻方的准备比守方还早。

这不是补丁能一键解决的。PHP 团队需要修改接近 200 个文件,开发者写了超过 1 万行代码——据《华尔街日报》。

漏洞在 PHP 自己身上,不在你的网站代码里

这里有一个让人后背发凉的地方。

Wiz 研究员的原话是:这些漏洞"在 PHP 引擎本身,与运行在它上面的应用程序无关"。

我们过去理解安全漏洞的方式是"你的代码写得不严谨"。但这次不一样——哪怕你写的是一个只有一行 <?php echo "Hello World"; 的空白页面,只要跑在受影响的 PHP 版本上,它就是有洞的。 CrowdStrike 的验证更直接:攻击"不需要认证、不需要会话、不需要任何存在漏洞的应用代码"。

漏洞的技术本质也很朴素:PHP 在处理请求时遇到致命错误(尤其是内存耗尽),会留下一段损坏的内部状态。后续的请求或工作进程复用这块内存时,就会发生内存泄露或类型混淆——攻击者借此读到服务器进程内存里的密码、令牌、API 密钥。

SentinelOne 特别警告:攻击者甚至不需要执行代码,光读内存就能拿到密码、token 和 API key,"这让那些只盯着恶意代码执行的检测工具很难发现"。

Wiz 说影响范围是过去十年发布的每一个 PHP 版本,最早回到 5.4。

真正的转折点:一个人,一周

如果这件事只是"又一个漏洞",它不值得你现在还在读。

真正让人背后发凉的是它的发现过程。

Wiz 团队在 8 月 19 日发现第一个漏洞,8 月 20 日确认对 Drupal 的未认证 RCE,8 月 21 日确认对 WordPress。然后 8 月 24 日报给 PHP 官方,官方 9 月 21 日确认并开始做协调修复,10 月 21 日补丁发布。

从发现到修复,62 天。而漏洞本身在代码库里躺了十几年。

为什么十几年都没人挖出来?因为这类内存漏洞极难利用——不同 PHP 版本、配置、部署方式的内存布局都不一样,针对一个站点写的利用程序,换到另一个可能就得重写一遍,每次都要重新分析、测试、调试。在 AI 之前,这件事需要一支世界级团队花几个月。

用了 AI 之后呢?Wiz 研究员的原话:

"漏洞的代码在那儿躺了十几年。AI 改变的,是理解这些弱点并把它们变成可用利用程序的能力。 有了前沿模型和合适的工具,一个人一周完成的工作,过去需要世界级团队几个月。"

他们用的是 Wiz Atlas、Gemini 4 Argon 和 GPT-5.6 Sol。Google DeepMind 安全负责人 Raluca Ada Popa 说,Argon 在找漏洞、写利用、做检测、验证补丁上贡献极大。

Wiz 把这称为"AI 拐点",并且直接和两个历史时刻并列:

  • 2014 年 Heartbleed——暴露了支撑互联网的共享基础设施有多脆弱
  • 2021 年 Log4Shell——揭示了层层嵌套的软件依赖能造成多深的暴露

他们认为 PHP2Shell 可能是AI 时代的同类转折点。原因是它改变了攻防两端的经济学:

"随着完成这项工作所需的时间和专业知识不断下降,复杂度可能不再提供有意义的屏障,这将改变我们在实践中如何定义'脆弱'。"

翻译成人话:以前"这个漏洞太复杂,理论上可行但实际上没人会利用",这句话是一道天然护城河。现在这道墙变薄了。

我们普通人现在该做什么

先说结论:如果你只是普通网民——刷新闻、点外卖、用 WordPress 建个小站——你不需要连夜做任何事。补丁是 PHP 官方自动推送的,主流虚拟主机(SiteGround、Bluehost 之类)都已经推好了。真正暴露的,是那些自己买 VPS、自己装面板、自己装 PHP 的站长和中小团队。Huntress 的研究员的建议是:优先清点所有暴露在公网上的 PHP 安装,包括那些藏在第三方软件、主机控制面板甚至 Windows 应用里的。

但有两件事,值得你多看一眼。

第一,"复杂所以安全"这个假设,现在要打个问号了。 如果你是一家公司的技术负责人,过去做安全评估时可能会接受"这个系统太老旧太复杂,理论上能攻破但实际没人会来"这类说法。这个逻辑正在失效。真正该问的问题变了——不再是"有没有人能攻破它",而是"一个会用 AI 的普通攻击者需要多久"。

第二,也是我最在意的:那条时间线。 AWS 在 10 月 17 日抓到了利用尝试,比公开披露早四天。而漏洞提前泄露,是 10 月 20 日发生的。也就是说,当 Hacker News 上那篇帖子出现时,攻方手上的信息已经比守方多了至少三天。

这不是能力问题,是流程问题。协调披露这个机制,建立在一个假设上:参与者都是守规矩的人。这次有人不守规矩——Chainguard 提前发了镜像,Calif 误发了视频,一个匿名账号提前捅了编号。三方各捅一次,48 小时内整个互联网被动。

我们抱怨过很多年"为什么这种事总是我们普通人倒霉"。可这次挺有意思的是,它其实是一个好消息——十几年躺在代码库里的巨大风险,被 AI 挖出来,然后在一个四周之内被打上了补丁。是 AI 发现的漏洞,也是 AI 更快地把它解决了。

只是下次再遇到"某个系统太复杂了,没人能攻破"这句话,你别再那么放心了。


信息来源

本文为新闻解读。修复版本为 PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35;PHP 8.1 及更早版本已停止常规更新,需依赖发行版或 LTS 厂商回补。文中"几百万次"为 Cloudflare 10 月 21 日口径的攻击尝试计数,非成功入侵数。

文章分类

标签