PHP爆雷引发全球紧急「拔网线」,别指望 AI 拯救互联网 - NBA赛程

互联网正在经历一场持续48小时的紧急状况。

昨晚,欧洲多个国家的政府网站几乎在同一时间接连下线。芬兰交通与通信局暂停了部分在线服务;荷兰的电子身份系统DigiD、政府个人服务平台MijnOverheid以及政务门户网站全部停止运行,甚至连荷兰国家网络安全中心自己的网站也曾一度关闭。

在日本,多个主流互联网社区平台——包括日本最大的插画/漫画/小说投稿社区pixiv、老牌弹幕视频网站Niconico、以及pixiv旗下的创作者电商平台BOOTH——纷纷宣布进入紧急维护状态。此外,寿司郎也在其官方平台发布通知,称因系统维护升级,今天的小程序暂停服务。

让如此多机构高度警惕的,是两个刚刚公开编号的漏洞:CVE-2026-109618和CVE-2026-109619。安全社区给它们起了个直白的绰号“PHP2Shell”,意思是攻击者只需向你的网站发送一个请求,就能在你的服务器上获取一个shell(命令行入口),从而获得完全控制权。

10月21日,PHP官方发布了紧急更新,版本包括8.5.12、8.4.27、8.3.36和8.2.35,同时确认这两个漏洞的严重程度均为CVSS 9.2分(满分10分),且不需要账号密码即可远程利用。在Apache(全球使用时间最久的开源Web服务器软件)上,PHP最常见的部署方式下,攻击在网站自身代码开始运行之前就已经被触发。

关于这个“满分漏洞”的谣言,结果却是真实的。这场风波的开端颇具戏剧性。按照原计划,漏洞细节应在10月22日协调披露。但10月20日下午,Hacker News上出现了一条帖子,声称PHP存在两个评分10.0的远程代码执行漏洞。尽管帖子很快被删除,但截图已经传播开来。安全公司watchTowr在几小时内出面确认,这份泄露属实,漏洞确实存在,并且他们已经成功复现了其中一个。

PHP安全团队当晚紧急发布预警,将发布时间提前了24小时,并罕见地补充了一句:“如果漏洞细节被公开,或者出现野外利用的证据,我们保留进一步提前发布的权利。”混乱仍在持续。当晚,参与发现漏洞的安全公司Calif误发了一段演示视频,展示了他们的攻击代码在多个真实目标上成功运行,视频副本随即在社交平台上疯传。

第二天早上,提前获得补丁的发行商Chainguard单方面打破了保密协议,抢先发布了包含修复的镜像。补丁本身就像一张“漏洞地图”,攻击者只需对比新旧两个版本的二进制文件,查看被修改的代码段,就能反推出漏洞的位置和原理。PHP基金会在事后复盘时,对这种漏洞公开方式感到极为愤怒。按照行业惯例,发现这种级别的漏洞后,研究者、厂商和发行商会约定一个统一时间,在此之前任何一方都不能公开细节。这样做的目的是确保补丁和漏洞信息同时到达公众手中:用户一知道漏洞,就能立即安装补丁,从而最大化防守方的时间窗口。

这次出问题的对象是互联网的地基。要理解这次事件为何如此可怕,首先需要了解PHP是什么。它相当于互联网的“后厨”。当用户在前台登录、搜索、下单、评论时,PHP在服务器端处理请求、读写数据库,并将结果返回浏览器。WordPress、Drupal、Joomla、Magento、以及维基百科背后的MediaWiki——所有这些都运行在PHP上。根据W3Techs的数据,在可识别服务端技术的网站中,69.3%使用PHP;排名第二的JavaScript仅占8.1%。通过白帽汇的国产网络空间测绘搜索引擎FOFA检索含有WordPress的全网记录,可以发现率先响应的地区是欧美、日本等,因为这些地区匹配到WordPress指纹规则的资产条目最多。

过去,大多数“PHP网站被黑”的新闻中,问题出在某个插件或某个应用上。而这次的漏洞位于PHP解释器内核,与上层应用无关。正如发现者之一Wiz所说:“哪怕你的网站上只跑着一个Hello World,也照样受影响。”两个漏洞的技术原理并不新鲜,但关键在于它们被证明“真的能用”。CVE-2026-109618是PHP处理“内存耗尽”时,采取了粗暴的急刹车方式(longjmp)。如果刹车恰好发生在某个微妙时刻,内部数据只初始化了一半,后续的清理流程却会把这一堆半成品当作正常数据处理,攻击者可以借此让服务器执行自己的代码。官方已证实:在默认配置下,通过构造特制的multipart请求,将内存“刚刚好”耗尽,就能在应用代码运行前完成攻击。CVE-2026-109619则是当一个请求处理完毕、内存被释放后,某些全局状态没有清理干净。同一个工作进程处理下一个请求时,可能会再次使用这些已失效的内存,这种经典的“释放后使用”可以被精心堆叠成代码执行,并泄露内存中其他用户的密码、令牌和API密钥。值得注意的是,已证实的利用路径之一经过的session.upload_progress(会话上传进度)功能默认开启,应用甚至不需要调用session_start()。

目前,修复版本只覆盖PHP 8.2到8.5四个分支。而W3Techs的同日数据显示,在所有PHP网站中,仍有27.0%运行在PHP 7.x,7.7%运行在PHP 5.x,这些早已停止维护的版本无法获得官方补丁。计算机取证专家Hal Pomeranz提到,“有太多嵌入式安装永远不会被打补丁,太多被遗忘的、无人维护的应用。这一次,长尾会很长。”

漏洞公开后,OpenAI发文,将这次事件列入其AI安全成果:Calif的研究人员使用GPT-5.6 Sol找到了关键缺陷,多个团队合作完成了验证与应对。然而,熟悉AI公司宣传套路的人可能会多问一句:真的是模型挖出了漏洞,还是又给人类的研究成果贴上了AI标签?披露当天,Calif在X上公开“正名”,称Ryan Austin才是第一个发现并做出可用攻击代码的人,证据是他8月5日就发布了一条包含发现哈希的推文。在漏洞第一发现者自己撰写的官方技术复盘中,Ryan强调初次发现没有依赖特殊的工具框架,也没有使用公众拿不到的模型。他对目标历史的了解,决定了往哪里追查;简单的提示词还做不到让模型找出所有漏洞。他笔下的发现链一路追溯到2004年Stefan Esser找到的第一个PHP内存限制漏洞、2020年一份被忽视的bug报告,以及2024年那场未能证明可利用性的审计。言下之意是,AI压缩的只是验证时间,而方向感仍然来自人。

PHP基金会的复盘也确认,OpenAI团队在8月11日独立报告了相同根本原因,之后又补充了攻击路径。他们在文章中详细记录了漏洞是如何被发现和修复的,以及披露失控的完整记录。2024年,PHP接受了多年来首次外部安全审计,一名核心开发者在修复审计发现的问题时,就注意到了内存耗尽处理的隐患。但当时没人能证明它真的可以被利用,几种修复方案又各有代价,可能破坏兼容性,或引入新的拒绝服务风险,团队迟迟无法拍板,问题被搁置了。PHP基金会事后称之为一次“结构性失败”。2026年夏天,三个团队带着AI工具,几乎同时发现了这个问题:8月1日,安全公司Calif的研究员Ryan Austin在OpenAI的GPT-5.6 Sol帮助下发现首个漏洞,8月11日报告PHP团队;OpenAI同日独立报告了同一根因。8月19日,谷歌旗下的Wiz用自己的平台Wiz Atlas,配合Gemini 4 Argon和GPT-5.6 Sol独立发现漏洞;随后两天内,先后在Drupal和WordPress的官方镜像上验证了无需登录的远程代码执行。“这类内存管理风险很早就有人注意过,但长期被认为太难以至于无法利用。”Calif的CEO Thai Duong对《华尔街日报》说。AI将理论缺陷变成可用的攻击代码,需要串联多个环节、针对每个目标的内存布局反复调试。过去,这是世界级团队数月的活,现在一个研究员加前沿模型,一周就能完成。Wiz联合创始人Ami Luttwak称这是“迄今由AI协助发现的最严重漏洞”,并将其与那些同样深埋于互联网地基、潜伏多年才爆发的传奇漏洞Heartbleed、Log4Shell并列。

漏洞确认后的两个月里,PHP维护者主导修复,Calif、Wiz、OpenAI参与验证,Google Cloud、Cloudflare、AWS、微软、Automattic、Fastly、Akamai、Vercel等厂商提前准备缓解方案,Linux发行版和长期支持厂商提前拿到补丁。Cloudflare则宣布其WAF防护规则对包括免费版在内的全部客户默认生效,为此他们上线了一项新能力“全事务检测”,将请求和源站响应关联起来判断攻击是否得手。即便如此,Cloudflare当天就观测到了针对客户的攻击流量,以及攻击者不断变形载荷试图绕过规则的尝试。OpenAI在报告中也提到已经开源了一个Skill,可以安装到Codex里,专门用来检测网站是否存在php2shell漏洞。安装方式只需发送这句话到Codex:“$skill-installer install both skills from https://github.com/openai/php2shell-checker”,检查方法则是使用对应的Skill并附上链接。如果你拥有该网站的服务器访问权限时使用phpcheck-server,当你只有URL时使用phpcheck-url。

对普通用户来说,这件事最直接的感受就是,某些网站可能因为紧急维护,导致短暂无法登录。但对任何运营着网站或服务的人来说,要升级到修复版本,要重启所有PHP进程,还要给拿不到补丁的老版本安排迁移或隔离。国内一些大量跑在宝塔面板、ThinkPHP和Discuz上的长尾站点,它们中的老版本这次拿不到官方补丁,只能靠迁移或隔离来兜底。而对于整个行业,PHP2Shell留下的是一道更长的影子。OpenAI在复盘里承认:帮助研究者识别严重缺陷的能力,同样可以帮助攻击者更快打造攻击工具。补丁公开的那一刻,攻防双方拿的是同一份代码修改记录,所谓“防守方窗口期”,正在变成需要被精确计算的资源。十多年前,这些缺陷被写进PHP的代码里时,没有人能用上它们。如今AI把它们翻了出来,这一次,它们先在防守方手里。

我们有理由肯定AI在这次事件中的贡献,研究者借助AI,能够继续追查线索、分析失败原因,把过去难以完成的尝试推进下去。但证明漏洞可以被利用,往往就意味着做出了一套能够运行的攻击代码。模型在这个过程中展现出的分析和调试能力,也可能被用来改进攻击工具。随着这类工作的门槛下降,维护者需要应对的威胁也会增加。这次,研究者提前提交报告,为修复争取了时间。以后这样的准备时间还能剩下多少,却很难预料。AI可以越来越快地找出问题并验证问题,但整个互联网能否跟上修补的速度,仍然是另一回事。