2004年,德国安全研究员 Stefan Esser 在 PHP 里找到一个挺吓人的洞。
PHP 这个名字你可能不熟,但你大概率每天都在用它。全世界大约七成的网站跑在它上面,WordPress、Drupal,还有维基百科背后的 MediaWiki,都是。Esser 当年发现,只要想办法把 PHP 的内存撑爆,它在收拾残局的时候就会出岔子,攻击者能顺着这个口子远程控制服务器。他觉得太危险,连利用代码都没公开。
那个洞后来补了。但这个思路,先把内存撑爆,再趁乱钻进去,一直留在了安全圈的记忆里。
2020年,有人给 PHP 报了个编号 78876 的 bug,说特别长的变量会让内存溢出,临时文件也清不掉,当时没人当回事。2024年,OSTIF 和 Quarkslab 给 PHP 做正式审计,又碰到了同一类问题,报告里写的是能不能被利用,没有证明。没证明,就没修。
一扇门,二十年里被三拨人摸到过门把手,没有一个人把它推开。
大家并不笨,推开它实在太费劲了。要把好几个小毛病串成一条链,还得针对每个 PHP 版本、每种配置、每台机器的内存布局反复调试,换一个环境就可能前功尽弃。Wiz 后来在报告里的说法是,这件事处在人类研究员实际能做到的边缘。
然后到了今年7月30号。
安全公司 Calif 受 OpenAI 邀请,加入一个叫 Patch the Planet 的计划,用模型帮开源项目找漏洞。研究员 Ryan Austin 挑了 PHP。他在复盘里写得很老实,他们本来没指望能找到什么大东西,因为每家实验室都已经拿 AI 把这个目标审过一遍又一遍了。
结果开工没几天,8月1号,第一条能打穿 WordPress 的路径就出来了。
他用的是 GPT-5.6 Sol,没有特殊工具,也没用外面拿不到的模型。他做的事情,就是把 Esser 2004 年那个老思路交给模型,让它在现在的代码里找它的兄弟姐妹。他还专门提了一句,模型默认会盯着最新、最出名的漏洞往附近找,不会自己想到去翻二十年前的冷门老招,这个方向得由一个记得历史的人来指。
这句话我来回看了好几遍。大家都在聊 AI 会不会把安全研究员干掉,最先用 AI 撬开这扇门的,恰恰是一个把二十年老漏洞记在脑子里的人。
几乎同一时间,Wiz 的团队也独立摸到了这扇门。他们用的是自家的 Wiz Atlas,加上 Gemini 4 Argon 和 GPT-5.6 Sol,报告里专门点名 Gemini 4 Argon 在找洞、写利用、检测攻击、验证补丁上都出了大力。
这个名字有点眼熟。一周前我写过它,那篇聊的是同一个 Gemini 4 Argon 在 ARC-AGI-3 上换个测试框架,分数就从 49.8% 跳到 97.5%,我当时的意思是跑分没那么可信。回旋镖这就飞回来了,跑分说明不了什么,它这次干的可是真活。Wiz 说,有了前沿模型,他们几个小时就能把攻击适配到好几个不同的应用上。
所以在找和打这一头,AI 的时间是按天、按小时算的。
接下来轮到人这一头。
Calif 8月11号把第一个洞报给 PHP,14号交了能跑的攻击演示,15号 PHP 确认确实能打,21号又报了第二个。然后就是两个月。
OpenAI 牵头拉了一个联盟,PHP 维护者主导修复,Wiz、Cloudflare 这些公司帮忙测补丁、准备防护规则,还要跟白宫的超级智能部队、国家网络总监办公室、网络安全和基础设施安全局一起协调,让关键单位提前做准备。
为什么这么慢?
因为修比找麻烦太多了。PHP 这次没有哪里破了补哪里,它直接改了引擎处理内存耗尽的方式,把这一整类变体从根上堵死。改引擎就得测引擎,每一个还在支持的版本都要测一遍,发行版要往老版本上移植,托管商要测临时缓解方案,安全厂商要写检测规则。最后还得等全世界几千万个网站的管理员,一个一个去升级、重启。
门外的人可不会老实等着。据安全咨询公司 Roundly 整理,10月20号,补丁发布前一天,漏洞细节就在 Hacker News 上漏了出去,Cloudflare 在补丁发布前已经看到了早期攻击。

10月21号补丁上线。同一天,美国国家安全局发出警告,如果你的网站没法马上打补丁,那就先把它从网上撤下来。
一个国家安全机构给全世界网站的建议,是先拔网线。
我第一反应觉得荒诞,想想又挺合理。过去保护这些网站的,一直是撬锁这活儿太难、太费人,至于锁本身好不好,没人细看。 现在撬锁变成几个小时的事,锁却二十年没换过。Wiz 的原话是,复杂性可能再也算不上一道像样的门槛了。
更麻烦的是那些老房子。TechCrunch 提到,PHP 8.1 及更早的版本已经不再维护。按 Roundly 引用的 W3Techs 数据,大约三分之一的 PHP 网站还跑在 PHP 7 或 PHP 5 上,官方根本没有给它们发修好的版本。这些门,大概率没人来换锁了。

OpenAI 在公告里说,这只是他们已经找到的几个重大漏洞之一,接下来几个月类似的发现会急剧增加。他们拿出 10 亿美元,补贴安全资源有限的防守方用模型。
可找得越快,修的那头压力就越大。OpenAI 原文也承认,很多开源项目就是几个人的小团队,一边写功能一边处理安全报告。你让这样一个团队一个月收到十份 Calif 这种级别的报告,他修得过来吗?
OpenAI 在文末公开征求意见,其中一个问题是,当运营方已经失去管理权限时,政府要不要利用漏洞去给系统打补丁。他们甚至设想了一种终局,全网不停地扫描已知漏洞,发现了就通知站长,或者直接动手修。
人修不过来,已经开始认真讨论让机器拿着漏洞挨家挨户上门修了。 这个问题本身,比任何数字都更能说明处境。
顺着这个再聊聊另一家公司的思路。
就在 PHP 补丁上线前一天,Anthropic 的前沿红队发了一篇研究,路子刚好反过来。他们说,一个个找漏洞再一个个补,这条路扩展不了,你修好一个严重漏洞,对剩下那些还没发现的漏洞一无所知。
所以他们不去数门上有几把锁坏了,转头去数这栋房子到底开了多少扇本不该开的门。
Claude 扫了 25 个开源项目,500 多万行代码,找出 493 个问题。其中 11 个本该登录后才能用的项目,全部都有登录前就能被碰到的代码。
最典型的是 OpenSSH,全世界被审计得最狠的 C 代码之一。Claude 发现 10.4 版本里有大约 4500 行实验性的后量子签名代码,默认没启用,没登录的客户端却照样能碰到,管理员明确把它排除了也一样,这部分占了默认配置下 OpenSSH 登录前代码的 16% 左右。几轮修复之后,没登录的人能碰到的 OpenSSH 代码少了大约五分之一。还有一个项目,两个配置一起开会悄悄把客户端证书校验整个关掉,这个毛病在里面待了 21 年。
这些问题单拎出来,都没法直接拿来攻击。但门开着,门后面哪天冒出一个洞,就是现成的入口。
少开一扇门,门后面那些还没被发现的洞,一次性全部降级。 这是我读完 Anthropic 这篇最大的收获。

这让我想到古代筑城。城墙可以修得很长,城门却总是开得很少,每多一道门就多一处要派人日夜守着的地方,天黑了还得落锁。守城的人很早就明白,墙上的砖不可能块块都结实,门少一点比什么都管用。
AI 时代的软件,好像要重新学一遍这个老道理。找洞这件事,以后会越来越便宜,越来越快,攻守双方都一样。稀缺的是修的人手,以及一开始就少开几扇门的克制。
如果你手上有 PHP 网站,今天能做的事很具体,升级到 8.5.12、8.4.27、8.3.36 或 8.2.35,然后把所有 PHP 进程重启一遍,光装包不重启,跑着的进程照样是旧的。OpenAI 也放出了一个版本检查工具 php2shell-checker,可以先跑一下看看自己在不在名单里。如果你自己维护代码,可以学 Anthropic 问一句,有哪些功能默认开着、其实根本没人用。
我自己也说不准这场赛跑最后谁赢。从这次看,AI 两天找到的洞,人类花了两个月才修好,而且还有三分之一的老房子等不到新锁。
2004年那扇门,这次总算换上了新锁。下一扇门在哪,AI 大概会比我们先知道。
谢谢你看我的文章,我们,下次再见。
/ 作者:青玉白露

评论区
欢迎留下你的看法,支持匿名评论。
你的评论会公开展示,建议填写便于交流的昵称,并尽量提供有信息量的反馈。