![]()
PHP 是我最早学、也是用得最久的动态语言。
在很长一段时间里,它都是互联网公司的首选。我到现在还记得当年写 PHP、维护 PHP 网站的那些点点滴滴。
那会儿建站有个黄金组合:PHP 加 MySQL 加 Apache。再后来,Nginx 慢慢顶替了 Apache 的位置。
所以这两天看到 PHP 被 AI 挖出两个能远程拿下服务器的漏洞,我的第一反应是:意料之中。
但这么严重、影响面这么广,还是让我震惊了。
10 月 21 日,PHP 紧急发布新版本,修了两个漏洞,编号 CVE-2026-109618 和 CVE-2026-109619,严重程度都是 9.2 分(满分 10 分)。
它们有个外号,叫 php2shell。
攻击者不用登录,发几个特制的请求,就可能在服务器上执行自己的代码。PHP 5.4 以来的版本,几乎都至少中一个。
这事闹得有多大?美国 FBI、CISA 当天发帖催大家打补丁。
日本首相高市早苗在 X 上发帖,请大家当晚就打补丁,来不及的话先把网站停掉。据路透社报道,欧洲等地一批政府网站当天主动下线。
![]()
图:FBI、CISA 和日本首相的帖子
同一天,Node.js 也修了 10 个漏洞,其中一个能远程执行代码。
不过要先说清楚:PHP 这两个是 AI 参与挖出来的,Node.js 这批目前没有任何可信来源说跟 AI 有关。
漏洞出在哪
先说一个背景:你访问一个 PHP 网站,PHP 要先把表单、上传的文件这些数据解析好,然后才轮到网站自己的代码。请求处理完,PHP 还要做一遍收尾清理。
这两个漏洞,就出在这一头一尾。
第一个漏洞(109618),是内存撑爆后留下的“半成品”。
PHP 给每个请求设了内存上限,默认 128 MB,也限制了上传的大小。
攻击者发的请求没超过大小限制,但里面塞了成千上万个空字段和请求头。PHP 要给每一项建登记,内存比请求本身占得多,很快就被撑满。
PHP 往登记表里加一条时,是先把计数加 1,再写内容。如果刚好卡在这两步中间内存用完,PHP 会立刻“紧急跳出”,那一条就只写了一半。
用 Apache 的 mod_php 跑 PHP 时,不管请求成没成功,都会照常跑收尾清理。
清理程序按计数挨个处理,碰到那条没写完的记录,里面其实是攻击者提前布置好的数据。
![]()
图:漏洞一:内存撑爆留下半成品
第二个漏洞(109619),是上一个请求留下的“旧记录”。
一个 PHP 工作进程,会一个接一个地处理很多请求。有些信息,比如报错和会话,会存在进程的全局记录里,指向当前请求的那块内存。
攻击者先发一个请求,故意让它出致命错误中途退出,全局记录没来得及清掉。请求结束后,那块内存被回收,记录却还指着它。
接着攻击者再发一个请求,往同一块内存里塞自己的数据。新请求还没正式初始化,PHP 就先按那条旧记录去读,读到的正是攻击数据。
![]()
图:漏洞二:上一个请求的旧记录
最要命的是时机:这一切都发生在网站代码的第一行之前。你代码写得再小心,登录校验做得再严,都拦不住。
用 Apache 的 mod_php 最危险,默认配置就能被打穿。Nginx 加 PHP-FPM 也逃不掉,Calif 专门演示了这种组合下的攻击。
除了执行代码,漏洞还能读到服务器内存,里面可能有密码、令牌和 API 密钥。
你要怎么办
如果你手上还有 PHP 网站,要升级的是 PHP 本身。
修复版本是 8.5.12、8.4.27、8.3.36 和 8.2.35。
7.4、8.0、8.1 已经停止维护,官方这次只给了源码补丁,没有发正式版本,要自己编译,或者等发行版和主机商打好。7.3 及更早的版本,连源码补丁都没有。
![]()
图:你的 PHP 要升到哪
只升级 WordPress、Drupal 这类程序没用。漏洞在 PHP 运行时里,程序还没开始跑,它就已经出事了。升级完,记得把所有 PHP 进程重启一遍。
实在没法马上升级,官方给了一个临时办法:把 memory_limit 设成 -1,也就是不限制 PHP 的内存。但官方也说了,这不算完整修复,还会带来内存被耗光的风险。
OpenAI 还专门做了一个 Codex 技能,帮你检查自己的 PHP 版本要不要升。
AI 到底做了什么
这两个漏洞,根子其实很老。
2004 年,安全研究员 Stefan Esser 就发现过 PHP 第一个和内存上限有关的远程漏洞。
2024 年,一次外部安全审计又碰到了相关问题,但没能证明可以被利用,于是没修。
转折在今年夏天。安全公司 Calif 加入了 OpenAI 发起的“Patch the Planet”计划,开始审计 PHP。
按 OpenAI 的说法,Calif 用的是 GPT-5.6 Sol。
7 月 30 日开始审计,8 月 1 日,Calif 就找到了第一条能打到远程执行的路径。
8 月 11 日报给 PHP,8 月 15 日 PHP 确认攻击演示能跑通,10 月 21 日发布补丁。
![]()
图:老问题,今年几天就打通
另一家安全公司 Wiz 也独立找到了这两个漏洞。他们用了自家的 Wiz Atlas,加上 Google 的 Gemini 4 Argon 和 GPT-5.6 Sol。
Wiz 特别提到,Gemini 4 Argon 在找漏洞、写攻击程序、做攻击检测和验证补丁上都出了大力。
Wiz 的说法很直白:这些漏洞存在了十几年,要证明能被利用,得把好几个问题串成一条很复杂的链,几乎到了人类研究员的极限。
前沿模型把这个门槛降了下来:以前要一支顶尖团队干几个月的活,现在一个研究员一周就做完了。
图:人定方向,AI 提速
不过,AI 不是按一下按钮就把漏洞挖出来了。
Calif 的研究员 Ryan Austin 写得很清楚:他没用什么特殊工具,也没用外面拿不到的模型。
关键是他熟悉 PHP 这 20 年的漏洞史,心里有个猜测,再引导模型往那个方向去找。
他还说,模型默认会从最新、最出名的漏洞往周边找,不会主动去翻 20 年前的冷门手法。
TechCrunch 有句话总结得挺准:这个漏洞是因为 AI 才被发现、被提前防住的,但它变得这么危险,也是因为 AI。
AI 也站在另一边
按原计划,这是一次“先修好、再公开”的协调披露。OpenAI 说,他们牵头协调了两个月,拉上 PHP 维护者、Wiz、Cloudflare 等一起提前准备。
Cloudflare 在公开前约 9 小时,就给免费和付费用户上了防护规则。
但细节提前泄露了。Cloudflare 说,泄露后他们看到了冲着客户来的攻击流量,攻击者还在不停改写攻击代码,想绕过规则。
网上随之冒出一堆号称能用的攻击代码。安全研究员 Marcus Hutchins 看了一圈,说大部分是 AI 糊出来的,根本跑不起来,但至少有一个是真能用的。
至于有没有人已经被打,说法还不一致:美国 CISA 说还没观察到利用,Krebs 引述的专家则说已经有人在用了。
Wiz 的判断是,接下来很可能会有人大规模利用这两个漏洞,往网站里装后门。
扫描公司 Censys 的数据是,互联网上大约有 258 万台主机、5490 万个网站在跑 PHP。
Node.js:同一天,但不是 AI
PHP 发补丁的同一天,Node.js 也发了安全更新,22、24、26 三个版本线一起修了 10 个漏洞。
![]()
图:Node.js 这次修的 10 个漏洞
最严重的是 Brotli 解码越界写。Brotli 是一种常见的网页压缩格式,Node.js 自带解压功能。
按修复提交里的测试用例,问题出在一种“自相矛盾”的压缩数据上:头部声明只有 1 种块类型,后面却要求切换到另一种。
旧版解码器没及时拦住,继续往缓冲区里写,就写出了边界,改写了不该碰的内存,严重时可能被用来执行代码。
![]()
图:Brotli:自相矛盾的压缩数据
受影响的主要是会解压外部 Brotli 数据的 Node.js 程序。新版遇到这种数据,会直接报错。
另外两个高危漏洞,出在 TLS 证书的主机名校验上。
比如有人把 IP 写成全角数字“127.0.0.1”,或者写成“127.1”这样的简写。Node.js 检查证书时,先把它规范成 127.0.0.1,却当成域名去和证书比对;系统真正连接时,又把它当成 IP 地址。
两边对同一个地址理解不一致,一张本不该通过的证书就可能混过去,给中间人冒充留下机会。新版对这类写法统一按 IP 比对,或者直接拒绝。
![]()
图:证书校验:同一个地址两种理解
还有一个高危漏洞,会让 dns.resolve 遇到空字符时把域名截断。
修复版本是 22.23.4、24.22.1 和 26.12.1。已经停止维护的 20 及更早版本,官方不会再修。
这次更新还顺手把印度证书机构 eMudhra 那批出问题的中间证书,从 Node.js 自带的证书列表里删掉了。
至于是不是 AI 挖出来的:官方公告里致谢的都是具体的报告人,最严重的 Brotli 漏洞是 Node.js 核心成员 Matteo Collina 自己报的,没有一处提到 AI。
倒是修复其中一个 TLS 漏洞的提交里,标着 “Assisted-by: Pi”,看起来修代码时借助了 AI 编程工具。但这是修,不是找。
同一周,还有这些
GitLab 自托管版本出了一个 10 分漏洞,不用登录就能远程执行代码,影响可以追溯到 2014 年的版本。
印度证书机构 eMudhra 的私钥泄露,可能被人拿去签假证书、冒充正规网站。
Nginx 在 10 月 14 日修了 3 个 9.2 分漏洞,不过都要特定配置才能触发,没闹出 PHP 这么大的动静。
真正和 AI 有关的是今年 5 月那次:一家叫 depthfirst 的公司用 AI,挖出了 Nginx 一个藏了 18 年的远程执行漏洞。
网友怎么看
安全圈的账号 vx-underground 把那天早上写成了一段流水账:起床,刷手机,所有人都在喊 PHP,点进去一看,php2shell。
还有人替创业公司的初级程序员写了一段:周三早上只想推个小修复,一打开 Slack,公司群已经成了战场,CTO 全大写刷屏 php2shell。
合上电脑,离开公司,再也不回来。
发现者 Calif 看到日本首相的帖子,也忍不住说:首相都出来催大家升级 PHP 了,看来事情确实挺严重。
最后
OpenAI 在长文里说,PHP 这两个只是他们已经找到、正在修的几个重大漏洞之一,接下来几个月,类似的发现会急剧增加。
AI 让防守的一方先找到漏洞,也让攻击的一方更快写出攻击代码。这件事最后对哪边更有利,我说不好。
我只知道,当年那些用 PHP 搭起来、后来再也没人登录过的老网站,现在都暴露在外面。
你手上还有 PHP 或 Node.js 的服务吗?升级了没有?
参考资料
01|PHP 安全公告 CVE-2026-109618
https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w
02|Calif,php2shell
https://calif.io/php2shell
03|Wiz,PHP2Shell
https://www.wiz.io/blog/php2shell-php-rce
04|OpenAI,Patch the Planet
https://openai.com/index/coordinated-disclosure-of-critical-vulnerabilities/
05|Node.js 2026 年 10 月安全更新
https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.