一、导语:补丁上线 48 小时,攻击量级已经失控
10 月 21 日晚 10 点,PHP 官方发布了修复包。按惯例,这是漏洞故事的结尾——发现、上报、修复、披露。但这一次不是。补丁上线后的 48 小时里,真正发生的事情是:全世界突然意识到,运行着约 70% 网站的编程语言,核心引擎里有两个存在了十几年的洞,而 AI 把它们从「理论上可能」变成了「脚本就能打」。
Cloudflare CEO Matthew Prince 在 X 上给出的曲线比任何分析都直观:公开公告前 10 小时,Cloudflare 全网已经看到数千次利用尝试;公告后 45 分钟,数万次;2 小时,数十万;他发帖时已经是「数百万次」。这不是一次普通的漏洞披露——这是一场在补丁上线之前就已经开始的、全球规模的自动化扫描。
两个漏洞被合并命名为 PHP2Shell,编号 CVE-2026-109618 与 CVE-2026-109619,CVSS 最高 9.2。它们位于 PHP 引擎本身,而不是某个应用:WordPress、Drupal、Joomla 只是被拿来做演示的靶子,任何跑在受影响版本上的 PHP 程序——哪怕是一个 Hello World——都在射程内。
二、背景:一个十年的洞,和一条被 AI 缩短的路
根因听上去平淡得不像一个 CVSS 9.2:PHP 在处理请求时,如果遇到致命错误(尤其是一次内存耗尽),会销毁请求堆,但不会清掉某些指向该堆的全局指针。下一次由同一个 worker 处理的请求,可能把这些悬空指针当成活的簿记结构来用——典型的跨请求 use-after-free。Wiz Research 把它拆成两条利用链:一条走 multipart 上传进度的反序列化器,可以无认证读取 worker 内存,里面可能躺着别人的密码、会话 token、API key 和证书;另一条走致命错误回溯,能把悬空指针做成可控的内存破坏,最终在 Drupal 与 WordPress 上拿到无认证 RCE。
这类 bug 一直存在,只是过去「可演示」的成本太高。Wiz 的原话是:要把它变成可用 exploit,需要串联多个缺陷、还要针对每个目标的堆布局反复调试,"处于人类研究者实际能力边缘"。前沿模型把这道门槛拆了——Wiz 用了 Wiz Atlas、Gemini 4 Argon 和 GPT-5.6 Sol,其中 Argon 在定位与修复上贡献最大。他们的结论相当直接:一个研究员一周做完的事,过去要一个世界级团队做几个月。
“这些缺陷已经在代码里待了十多年。AI 改变的,是理解弱点并把它变成可用 exploit 的能力。”
时间线拉出来看,节奏快得不正常:8 月 19 日发现第一个漏洞;8 月 20 日确认 Drupal 无认证 RCE;8 月 21 日拿下 WordPress;8 月 24 日报告给 PHP 安全团队;9 月 21 日 PHP 确认并开始做协调修复;10 月 21 日补丁发布。发现到上报 5 天,上报到修好 58 天——这个比例本身就是这次事件的核心矛盾。
三、核心内容:两个 CVE、一次引擎级手术
PHP2Shell 不是补一个函数就能完事的漏洞。Wiz 原本只报了四个可利用的 bug,随后发现「问题深植于代码库」,需要一次彻底的修复;这四个 bug 最终被归并进两个 CVE。受影响的版本回溯到 PHP 5.4——也就是过去十年发布的每一个 PHP 版本,至少中一个。
补丁由 PHP 维护者主导,但修复只是整件事的一小块。Wiz 联合了 Automattic、Akamai、AWS、Cloudflare、Fastly、Google、Imperva、Microsoft、Vercel 等一长串厂商,在技术细节公开前准备好检测规则、WAF 规则和「打不了补丁也能扛住」的临时缓解方案。Wiz 自家的 Sensor 1.0.12768 版本直接内置了一条响应策略:检测到 PHP2Shell 典型利用行为就终止进程。
OpenAI 这一侧走的是另一条线。它牵头的 Patch the Planet 计划把维护者、研究者和安全厂商拉进同一个协调披露流程;安全公司 Calif 用 GPT-5.6 Sol 独立发现了同一批缺陷。OpenAI 还发了一个 Codex 技能,指向 github.com/openai/php2shell-checker,让站点自己跑一遍自查。至于为什么会有「四天提前量」——Ars Technica 报道称,有黑客在正式披露前四天就已经开始利用;Amazon 也表示在公告前观察到了利用尝试。
四、各方反应:从 NSA 警告到提前破禁
政府层面的反应是这次事件最不寻常的部分。NSA 的建议只有两条:立刻打补丁,或者把打不了补丁的服务器下线。英国 NCSC 提醒说,这类漏洞不需要任何登录凭据就能控制网站服务器。日本首相和多个国家政府发布了类似通告。白宫表示联邦机构正在评估对政府系统与关键基础设施的影响。落到具体站点上:4chan、部分 Wikimedia 服务、Archive.org 都曾短暂关站做升级。
披露秩序也出了问题。安全公司 Chainguard 在正式公告前几小时就发布了修复,被 PHP 基金会与同行批评为破坏禁运——这等于给攻击者提前递上了对照样本。Chainguard CEO Dan Lorenc 在 LinkedIn 上的解释反而更让人不安:他们是对着一个前沿模型输入「find bad vulnerabilities in PHP」,然后独立找到了同一批 bug。这句话把两种可能同时摆上桌:要么洞真的这么好找,要么模型在训练中已经见过它。
一线的恐慌是真实的。约翰霍普金斯大学教授、密码学家 Matthew Green 的比喻被转得最多:
“我们正处在电影里那个阶段——你得把手边所有东西都扔到僵尸前面,指望能拖慢它们一点。”
404 Media 的 Jason Koebler 把过去一个月称为 Black October,并列出同期被 AI 辅助挖出的其它问题:eMudhra(印度证书机构)、Node.js、GitLab、Plex、Railway、OpenCode。PHP2Shell 只是其中影响面最大的一个,不是孤例。
五、深度解读:发现变快之后,修复没有变快
第一层是攻防经济学被改写。过去,「利用难度高」本身就是一种防御——漏洞睡在代码里十几年,因为没人付得起把它变成 exploit 的成本。当这个成本从「世界级团队数月」降到「一个研究员一周」,大量原本被判为「不可利用」的历史漏洞会重新进入攻击面。Wiz 的措辞是:复杂度可能不再构成有意义的门槛。
第二层是速度的不对称。发现和利用可以在几天内完成,修复却要经过报告、确认、引擎级重构、生态验证、协调披露——PHP2Shell 走了 58 天,在漏洞史上已经算快。真正慢的是最后一公里:全球数以百万计的 PHP 实例里,有多少会在下周完成升级?历史经验不乐观。这也是为什么 Cloudflare 那条「数百万次尝试」的曲线值得记住——攻击者不需要赢,他们只需要等。
第三层是更长尾的代价。The Atlantic 提出的角度可能是这次事件最被低估的:那些跑在老旧 PHP 上、没人维护、也升不动的历史网站,会被预防性下线,或者被攻破后再也回不来。链接腐烂(link rot)不是抽象概念——它意味着一段互联网记忆的物理消失。
第四层,是这套能力的方向问题。OpenAI 把这次协调披露称为给防御方打开的「Defender's Window」——AI 先发现,于是政府和关键基础设施有时间在细节公开前做准备。但同一批模型、同样的用法,攻击者一样拿得到。开权重模型和「拒答被移除」的变体模型让门槛进一步降低。窗口是存在的,只是不会一直开着。
六、总结
一句话:PHP2Shell 把「AI 能找到漏洞」从演示变成了基础设施事故——70% 的网站在射程内,补丁上线 48 小时后攻击量级已到数百万次,而真正决定损失的,是接下来几周有多少台服务器真的完成了升级。