互联网正经历一场持续 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 小时,并罕见地补充道:“如果漏洞细节被公开,或者出现野外利用(in-the-wild exploitation)的证据,我们保留进一步提前发布的权利。”
混乱仍在继续。当晚,参与发现漏洞的安全公司 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 指出:“有太多嵌入式安装永远不会被打补丁,太多被遗忘、无人维护的应用。这一次,长尾效应会非常明显。”
AI 找到了它?一周,与数月
漏洞一经公开,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 可以越来越快地找出问题并验证问题,但整个互联网能否跟上修补的速度,仍然是另一回事。
