OpenAI 昨天披露了一场持续两个月的 PHP 漏洞协同修复:安全公司 Calif 用 GPT-5.6 Sol 找到了一处严重缺陷,Wiz 也独立发现并报告了相关漏洞,最后由 PHP 维护者主导完成修复和版本发布。
漏洞藏在 PHP 引擎里。WordPress、Drupal、Joomla 这些常见网站系统,都被研究团队演示过远程代码执行。
Wiz 为这组漏洞命名 PHP2Shell
但这场抢修最惊险的一段,发生在补丁快要发出来的时候。
补丁还没发,消息先漏了
按原计划,PHP 要在北京时间 10月22日晚10点公开修复版本。维护者提前把补丁交给发行商和服务商,让各家准备更新包,等同一时刻放行。
结果,10月20日深夜,两个漏洞编号先在论坛和社交网络上流传了起来,还带着一个吓人的“CVSS 10分”。PHP 基金会后来澄清,实际评分是 9.2,最初泄露的消息没有技术细节。
PHP 团队只好提前预告,把正式发布也往前挪了一天。
接着又出了岔子。Calif 误发了一段漏洞利用演示视频,虽然很快删除,副本还是传开了。到了21日,更多概念验证代码开始出现。
当天下午,Chainguard 又提前放出了包含修复的构建镜像。按照 PHP 基金会的说法,这比约定时间早了六个多小时:其他用户还在等更新,攻击者已经有机会研究修复后的二进制了。
为什么不干脆立刻把所有东西公开?因为不少发行商还在打包。消息已经传出去,能方便安装的补丁却还没准备好,这个空档同样危险。
直到 10月21日晚10点,北京时间,PHP 的正式修复版本发布,这轮紧急更新才有了统一的落点。
一个请求,碰到了网站的底层
PHP 很容易被当成“写网站用的老语言”。但 WordPress 博客、电商、论坛、内容管理系统背后,大量服务仍靠它运行。
这次的两个漏洞,编号分别是 CVE-2026-109618 和 CVE-2026-109619,都涉及引擎处理内存和致命错误的方式。
一种情况是,请求恰好在关键时刻耗尽内存,PHP 留下一些只初始化了一半的内部数据,后续清理却把它们当成完整数据使用。另一种情况是,请求出错后留下了指向已释放内存的状态,同一个工作进程处理下一次请求时,又继续用了它。
原本应该终止请求的错误处理,反过来成了攻击入口。
在 Apache 的 mod_php 等受影响场景中,攻击甚至可以在应用代码运行前触发,不需要先登录网站。其他部署方式的可利用路径有所不同,PHP-FPM 也有通过应用代码路径实现远程代码执行的案例。
Wiz 在 WordPress、Drupal 和 Joomla 上验证的远程代码执行路径
Wiz 还展示了另一种后果:从服务进程的内存里拿到环境变量、数据库密码或 API 密钥。未必每次都要先拿下完整的代码执行能力,泄露这些东西本身就足够麻烦。
Wiz 展示的内存泄露路径,敏感信息可能随内存内容暴露
这也是为什么,只把 WordPress 插件全部升级一遍,并不能代替这次 PHP 引擎更新。
AI 是怎么找到它的
Calif 的研究从 7月30日开始,属于 OpenAI 的 Patch the Planet 计划。
研究者 Ryan Austin 没有只丢一句“帮我找漏洞”,然后坐等结果。他知道 PHP 过去出过哪些问题,便带着模型沿历史上的利用思路重新检查。到 8月1日,内存耗尽和异常中断方向已经出现了第一批突破;8月11日,Calif 向 PHP 团队报告了可远程执行代码的问题,随后继续补充验证。
所以,值得注意的变化是:一个熟悉目标的研究者,能把大量代码追踪、猜想验证和调试工作交给模型推进。
Calif 还特意写到,最初发现并没有依靠专门打造的复杂 harness,也没有用私下拿到的未发布模型。
另一边,Wiz 从自己的研究路径独立走到了同一组问题。它在8月完成了 Drupal、WordPress 等目标的利用验证,并向 PHP 报告。
Wiz 披露的工具不只有 GPT-5.6 Sol,还包括 Gemini 4 Argon 和自家的 Atlas。模型参与漏洞发现、利用调试、检测与补丁验证。不同应用、不同内存布局需要反复适配,这些原本很耗研究者时间的工作,现在可以更快迭代。
2024年就有过迹象
最让人停下来的一份材料,来自 PHP 基金会自己。
PHP 基金会对发现、修复与披露过程的复盘
2024年,PHP 做过一次由 Quarkslab 执行的外部安全审计。核心开发者在处理其中一个问题时,已经发现了这次内存耗尽漏洞的早期迹象。
但当时没有找到明确的远程代码执行路径,几个修复方案又各有代价:破坏兼容性、引入新的拒绝服务风险,或者要求大量第三方扩展一起修改。真正熟悉引擎的开发者很少,还要处理其他工作,修复一再停下来、再启动。
基金会直言,这里面有决策机制和资源不足造成的结构性失败。
今年8月,Calif、OpenAI 和 Wiz 接连提供了更明确的攻击证据,修复才成为最高优先级。基金会出资让工程师全职投入,最后跨多个受支持分支交付了补丁。
发现漏洞之后,仍得有人判断怎样改不会把正常网站一起改坏,还要把变更带到旧版本、扩展和发行包里。这部分工作,没法靠多生成几份漏洞报告自动完成。
OpenAI 在这两个月里做的另一件事,就是把维护者、研究者和基础设施厂商组织到一起:验证补丁,准备旧版本更新,提前部署防护,再协调公开披露。
Cloudflare 则在正式补丁发布前上线了 WAF 防护,并报告已观察到相关攻击流量。临时防护能争取时间,服务器上的 PHP 仍然要更新。
Codex 也给了个检查入口
这次发布的修复版本是 PHP 8.5.12、8.4.27、8.3.36 和 8.2.35。运行旧分支的用户,需要看发行商或长期支持服务商提供的回补方案。
OpenAI 同时开源了 php2shell-checker:https://github.com/openai/php2shell-checker,提供两项 Codex Skill:有服务器权限时检查本机 PHP 版本,只有网站地址时尝试从响应头识别版本。
它能帮忙找出可能需要更新的实例,但网站不暴露版本时,结果会是 UNKNOWN,不能当成已经安全;发行商回补过补丁的版本,也需要结合其安全公告判断。
如果你的站点、面板或者容器里还跑着 PHP,这次值得打开部署配置,看一眼真正提供网页服务的那个 PHP 到底更新了没有。
参考链接
OpenAI:Patch the Planet 与本次协同修复:https://openai.com/index/coordinated-disclosure-of-critical-vulnerabilities/ Calif:PHP2Shell 研究与发现过程:https://calif.io/php2shell/ Wiz:PHP2Shell 漏洞研究:https://www.wiz.io/blog/php2shell-php-rce PHP 基金会:本次修复与披露复盘:https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/ PHP:安全更新公告:https://www.php.net/archive/2026.php Cloudflare:PHP 漏洞防护:https://blog.cloudflare.com/php-vulnerabilities-waf-protection/ OpenAI:PHP 版本检查Skill:https://github.com/openai/php2shell-checker