AINLP公众号文章

GPT 挖出 PHP 大漏洞,全球互联网连夜打补丁

赶紧打补丁

AINLP

公众号 · 61 篇文章

OpenAI 昨天披露了一场持续两个月的 PHP 漏洞协同修复:安全公司 Calif 用 GPT-5.6 Sol 找到了一处严重缺陷,Wiz 也独立发现并报告了相关漏洞,最后由 PHP 维护者主导完成修复和版本发布。

图片

漏洞藏在 PHP 引擎里。WordPress、Drupal、Joomla 这些常见网站系统,都被研究团队演示过远程代码执行。

Wiz 为这组漏洞命名 PHP2Shell

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 在 WordPress、Drupal 和 Joomla 上验证的远程代码执行路径

Wiz 还展示了另一种后果:从服务进程的内存里拿到环境变量、数据库密码或 API 密钥。未必每次都要先拿下完整的代码执行能力,泄露这些东西本身就足够麻烦。

Wiz 展示的内存泄露路径,敏感信息可能随内存内容暴露

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 基金会对发现、修复与披露过程的复盘

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

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →