PHP2Shell:AI 帮忙挖出 PHP 致命 RCE,70% 网站连夜打补丁
两个未授权 PHP 远程代码执行漏洞(CVE-2026-109618/109619,CVSS 9.2),由 OpenAI Patch the Planet 计划支持的 AI 审计发现,细节提前泄露、攻击流量抢在补丁前面出现,PHP 官方被迫在 2026 年 10 月 21 日提前发布四个分支的紧急更新。

如果你的网站跑在 PHP 上,过去 24 小时你大概率已经收到了一封标题带"紧急"两个字的运维邮件。2026 年 10 月 21 日,PHP 官方提前发布了四个分支的紧急安全更新——PHP 8.5.12、8.4.27、8.3.36 和 8.2.35,修复了两个被统称为 PHP2Shell 的未授权远程代码执行漏洞:CVE-2026-109618 和 CVE-2026-109619,CVSS 4.0 评分双双 9.2,离满分只差一线。
更让人坐不住的是漏洞的来历:它不是传统安全研究员一行行审计挖出来的,而是 Calif 安全研究员 Ryan Austin 在 OpenAI 的 Patch the Planet 计划支持下,用 GPT-5.6 Sol 对 PHP 源码做自动化审计,在 2026 年 7 到 8 月间发现的。Google 旗下的 Wiz 研究团队随后用自己的 AI 工具独立复现了同类漏洞。《华尔街日报》10 月 21 日的独家标题把事态写得直白——"AI Just Found a Bug That Puts up to 70% of the World's Websites at Risk"(AI 刚找到一个让全球多达 70% 网站面临风险的漏洞)。
这两个漏洞到底有多危险
先说结论:这是 PHP 生态近十年来最严重的漏洞之一。两个漏洞的影响面几乎覆盖了 PHP 5.4 至今的所有版本,无论你用的是传统的 mod_php、主流的 PHP-FPM,还是新锐的 FrankenPHP,只要跑 PHP,全在射程内。
- CVE-2026-109618:OOM(内存耗尽)场景下的内存损坏漏洞。攻击者无需任何认证,仅靠发送精心构造的请求,就能在内存损坏的瞬间夺取代码执行权。GitHub 安全公告编号 GHSA-w8hw-w9fx-j79w。
- CVE-2026-109619:跨请求的全局状态残留问题。PHP 的请求隔离模型被撕开一道口子,攻击者可以把恶意状态"寄存"在全局空间里,等待下一个请求触发执行。GitHub 安全公告编号 GHSA-6wmf-4rv5-p3rp。
两个漏洞单独看都足够致命,凑在一起更麻烦:一个负责撕开内存防线,一个负责把恶意载荷跨请求"续命"。更关键的是"未授权"三个字——攻击者不需要账号、不需要登录,互联网上任何一个能访问到 PHP 服务的入口都可能成为跳板。对运维来说,这意味着补丁窗口不是"这周找个时间",而是"现在、立刻"。
技术深挖:内存损坏 + 状态残留,为什么组合起来最致命
公开的技术分析(Sansec 的 php2shell 研究页写得最细)把两个漏洞的利用链条拆得很清楚,值得展开说说,因为它解释了"为什么这次不是打个补丁就完事"。
CVE-2026-109618 的核心是 OOM 路径上的内存损坏。PHP 解释器在内存耗尽(Out of Memory)时要走一条"优雅降级"的错误处理路径——释放资源、抛异常、保证进程不直接崩掉。问题恰恰出在这条"救生通道"里:某块内存在错误处理过程中被释放了两次(或被提前释放后又被引用),形成 UAF(Use-After-Free)。攻击者的思路是:先发送大量请求把目标进程的内存推向 OOM 边界,再用精心构造的请求精确触发那条错误路径,在内存损坏的瞬间把堆布局"摆"成自己想要的形状,最终劫持执行流。UAF 利用是二进制漏洞里的"重型武器",需要攻击者对目标内存布局有相当的掌控力——而这正是 AI 审计擅长的地方:模型可以不知疲倦地枚举"哪条错误路径、哪种输入序列"能稳定复现损坏条件。
CVE-2026-109619 的核心是请求隔离的破口。PHP 的经典执行模型是"请求级隔离":每个请求进来,解释器初始化一片干净的全局状态,请求结束再撕掉。但这个漏洞让一部分全局状态在请求结束后没有被正确清理,残留到了下一个请求。攻击者分两步走:第一个请求往全局空间里"寄存"恶意数据(比如污染某个后续请求会读取的配置项或缓存槽),第二个请求触发使用这段残留状态的代码,把寄存的数据变成执行。这类"跨请求污染"最阴险的地方在于:单看每个请求都"正常",WAF 日志里也看不出明显攻击特征,传统的请求级检测基本抓瞎。
两个漏洞摆在一起,攻击者的工具箱就完整了:109618 负责在内存层打开缺口,109619 负责在逻辑层把恶意状态"续"进下一个请求。安全厂商把这次命名为 PHP2Shell(致敬当年的 Shellshock),不是没有道理的——它和 Shellshock 一样,是"解释器层、未授权、影响面按版本横跨十几年"的组合。
为什么偏偏是 PHP:三十年代码库的技术债总账
PHP 解释器(Zend Engine)是 1999 年前后成型的 C 代码库,二十多年里堆了无数"历史原因"。这次出事的两个点——OOM 错误处理路径和请求级全局状态管理——恰恰是历史最久、最少人敢动的角落。原因很现实:
- 错误处理路径是测试覆盖率的黑洞。正常流程有完整的单测,但"内存耗尽时这 200 行代码走得对不对",几乎没人写测试去覆盖。OOM 本身在测试环境里就很难稳定复现,久而久之就成了"相信它是对的"的代码。
- 全局状态是 PHP 架构的原罪。PHP 的 SAPI 层(mod_php、FPM、FrankenPHP 各自实现一套)都要和 Zend 的全局状态机打交道,状态初始化/清理的契约散落在几十个文件里。改一处、漏一处,是这类 bug 的标准剧本。
- "没人有空看"是过去的安全假设。审计 Zend 这种量级的 C 代码库,人力成本极高,过去只有拿悬赏的顶级研究员偶尔啃一口。现在 AI 把初筛成本打到了接近零,"没人看"的假设正式失效。
这对整个开源世界是个预警:OpenSSL、Nginx、Redis、Squid——所有"又老又关键又没人细看"的 C 代码库,都在 AI 审计的射程内。未来一两年,这类"沉睡十年、一朝爆雷"的漏洞只会多不会少。防守方的理性策略只有一个:把基础组件的版本更新做成自动化流水线,而不是"等出事再升"。
Patch the Planet:OpenAI 的"AI 挖洞"制度化
这次披露里容易被忽略的一条线是 OpenAI 的 Patch the Planet 计划。简单说,这是 OpenAI 出钱出力、让安全研究员用它的模型去审计关键开源项目的"AI 版漏洞悬赏"。Ryan Austin 就是在这个计划支持下拿到算力和模型权限,去啃 PHP 源码的。漏洞发现后,走的是标准的协调披露流程:先私下通知 PHP 安全团队,定好补丁和披露时间表,OpenAI 还专门开了 coordinated disclosure 页面公示全过程。
这个模式值得琢磨:过去是大厂的安全团队自己养人挖洞,现在是"模型厂商出模型、研究员出时间、开源项目出代码"的三方协作。对模型厂商来说,这是展示"AI 向善"的最佳公关;对开源项目来说,等于白嫖了一支不知疲倦的审计队伍;对研究员来说,算力门槛被抹平了。Patch the Planet 如果跑通,会有更多模型厂商跟进——"AI 审计开源基建"可能变成大厂的标配 CSR(企业社会责任)项目,顺带把自家模型的代码能力秀一圈。
但硬币的另一面是:Wiz 的独立复现证明了"撞洞"正在变容易。当挖洞工具普及到一定程度,协调披露的"90 天窗口"之类惯例会被压缩到几周甚至几天。这次 PHP 团队从 7-8 月发现到 10 月 21 日发补丁,用了大约三个月做修复和回归测试——在 AI 时代,这个响应速度以后可能被视为"太慢"。厂商的安全响应流程,得按"AI 级"的节奏重排了。
"70% 网站"这个数字是怎么来的
《华尔街日报》Robert McMillan 的独家标题说"多达 70% 的网站面临风险",这个数字不是拍脑袋的。W3Techs 的长期统计显示,PHP 至今仍驱动着互联网上约七成的网站(WordPress 一家就占了 CMS 市场的六成以上)。PHP2Shell 影响 PHP 5.4 至今几乎所有版本——注意是"几乎所有版本",意味着不只是最新版,跑在老版本上的存量站点全在里面。
WordPress 生态尤其值得单独拎出来说:全球数千万个 WordPress 站点,绝大多数跑在虚拟主机或面板(cPanel、宝塔)上,PHP 版本由主机商统一管理,站长本人可能根本不知道自己用的哪个版本。这类站点的补丁链条是"PHP 官方→主机商→站长",每一环都有延迟。历史上每次 PHP 高危漏洞,真正最后打上补丁的长尾站点都要拖上几个月。这次有 Cloudflare 的 07:43 UTC 攻击流量作证——武器化速度是以小时计的,长尾站点的风险敞口会比想象中大得多。
如果你是给客户做站的外包开发者,现在就该主动给客户发一封升级通知邮件;如果你是主机商用户,去工单系统问一句"PHP 紧急补丁什么时候上"。别等。
AI 挖洞:从"人找 bug"到"模型扫源码"
PHP2Shell 真正值得玩味的不是漏洞本身,而是它的发现方式。Ryan Austin 的操作流程大致是这样的:把 PHP 解释器的 C 源码喂给 GPT-5.6 Sol,让模型在"内存管理"和"请求生命周期"这两个高危面上做定向审计,模型标出可疑点,人类研究员再逐一验证、写出可利用的 PoC。整个过程里,AI 干的是不知疲倦的"地毯式初筛",人干的是"定点爆破"。
这件事有三个信号值得所有做开发的人记住:
- 第一,基础软件的"暗债"正在被 AI 加速清算。PHP 解释器是 30 年历史的代码库,里面沉淀了多少没人敢动的角落,过去靠的是"没人有空看"。现在一个研究员加一个模型,两个月就能扫一遍。这种"AI 审计"一旦成为标配,未来几年我们会看到更多沉寂多年的基础组件爆出高危漏洞——不是世界变危险了,是探照灯第一次照进了地下室。
- 第二,"独立双发现"正在成为 AI 时代的新常态。Wiz 团队用自己的 AI 工具链独立发现了同类问题。这说明只要工具普及,"撞洞"的概率会大幅上升。对漏洞披露流程是个考验:协调披露的窗口期会被压缩,留给厂商的响应时间越来越少。
- 第三,攻防两端都在 AI 化,但节奏不对称。就在本月稍早,路透社还报道过 AI agent 被用来攻破上百家企业网站(攻击方用 AI 入侵)。PHP2Shell 则是反方向的故事:AI 帮防守方挖洞。问题在于,挖洞的 AI 和利用漏洞写 exploit 的 AI,用的可能是同一套能力。补丁发布和武器化之间的赛跑,只会越来越快。
最惊险的 48 小时:泄露打乱了一切
按原计划,PHP2Shell 定在 10 月 22 日统一披露,给全球运维留出"补丁已就绪、细节未公开"的安全窗口。但 10 月 20 日,细节提前在 Hacker News 上泄露,计划彻底被打乱。The Hacker News 在 10 月 21 日的报道里写得很克制:"a day after details leaked ahead of a planned October 22 disclosure"——泄露发生后只过了一天。
PHP 安全团队的反应堪称教科书:不等 22 日,直接把补丁发布时间提前到 10 月 21 日 14:00 UTC,四个分支同步放出。但即便如此,窗口期还是出现了裂缝——Cloudflare 观测到,在 10 月 21 日 07:43 UTC,也就是补丁发布前数小时,互联网上已经出现了针对该漏洞的攻击流量。换句话说,从泄露到实战,攻击者只用了不到两天。
图:PHP2Shell 从发现到补丁的披露时间线。最值得注意的是 10 月 21 日 07:43 UTC——补丁发布前,攻击流量已经先到了。
同一天,英国国家网络安全中心(UK NCSC)和荷兰国家网络安全中心(NCSC-NL)相继发布安全警报,USA Today 开了实时更新帖(美东时间 10 月 21 日中午 12:38 还在更新),Sansec 等安全厂商也放出了技术分析。一个漏洞能让两家国家级 CERT 当天发警报,说明这事的定级是"基础设施级"的。
这里有个值得讨论的披露伦理问题:提前泄露到底是好是坏?支持提前披露的人会说,漏洞细节早晚会流出,早泄露早让大家警觉;反对的人会指着 Cloudflare 那 07:43 的攻击流量说——在补丁还没就绪时公开细节,等于给攻击者发了开工通知书。PHP2Shell 的现实是:泄露已经发生,争论没有意义,唯一正确的反应就是以最快速度打补丁。以后再遇到"原定披露日"和"提前泄露",厂商大概率会学 PHP 这次:不等了,直接发。
历史对照:Heartbleed、Log4Shell 教会我们的三件事
每次出现"编号级"漏洞,媒体都会翻出 Heartbleed(2014)和 Log4Shell(2021)来类比。PHP2Shell 和它们比,有三点异同值得记住:
- 相同点一:都是"基础设施级"的单点故障。Heartbleed 是 OpenSSL,Log4Shell 是 Log4j,PHP2Shell 是 PHP 解释器——全是那种"平时感觉不到、出事全网买单"的底层组件。这类组件的共同特点是:用的人极多,真正看懂源码的人极少。
- 相同点二:长尾补丁永远是噩梦。Log4Shell 爆发三年后,互联网上还能扫到没打补丁的实例。PHP 的版本碎片化比 Java 更严重(5.4 到 8.5 横跨 12 年),这次的长尾只会更长。未来几个月,针对 PHP2Shell 的批量扫描和利用会进入常态化,WAF 规则要长期开着,别补完就关。
- 不同点:发现方式变了。Heartbleed 是人审出来的,Log4Shell 是人挖出来的,PHP2Shell 是 AI 主导扫出来的。这是第一次"AI 挖洞→大厂协调披露→全球同步补丁"跑完全流程。从此往后,"基础软件高危漏洞"的发现速度会从"年"变成"季度",甚至"月"。安全团队的补丁 SLA(服务等级目标)得重写了。
还有一个细节:Log4Shell 时代,攻击者用了一周才把利用武器化到"复制粘贴就能用"的程度;PHP2Shell 从 HN 泄露(10 月 20 日)到 Cloudflare 观测到攻击流量(10 月 21 日 07:43 UTC),不到 36 小时。武器化的加速曲线,比漏洞本身更值得警惕。
vibe coder 行动清单:现在就去查三件事
如果你是自己搭站的独立开发者,别觉得"我的小站没人盯"。自动化扫描器不挑食,专找没打补丁的版本。下面这三件事,按顺序做:
- 1. 查 PHP 版本。跑
php -v,对照补丁线:8.5.x 升到 8.5.12+,8.4.x 升到 8.4.27+,8.3.x 升到 8.3.36+,8.2.x 升到 8.2.35+。如果你还在 8.1 或更老——官方补丁线已经不覆盖,考虑尽快迁移到受支持的分支,这次漏洞影响的可是一直回溯到 PHP 5.4。 - 2. 别只升 PHP,顺手看 SAPI。mod_php、PHP-FPM、FrankenPHP 全受影响,升级 PHP 后记得重启对应的服务进程,否则旧进程还在内存里跑,等于没升。用宝塔、1Panel 这类面板的,去面板里点"更新"并重启服务;用 Docker 的,重新拉基础镜像。
- 3. 检查 composer 依赖和 WAF 规则。漏洞在解释器层,composer 包升不升级挡不住它,但这是个好机会顺手把依赖也更新一遍。如果暂时升不了级(比如生产环境要走变更流程),先上 WAF 虚拟补丁规则顶着——Cloudflare、长亭这些厂商当天就出了规则,别裸奔。
另外提醒一句:这次事件之后,市面上一定会出现打着"PHP2Shell 检测工具"旗号的钓鱼页面和恶意脚本。检测工具只从 php.net、GitHub Security Advisory 或你信任的云厂商控制台找,陌生链接一律不点。
判断:补丁只是上半场
PHP2Shell 会像历史上的 Heartbleed、Log4Shell 一样,成为一个"分水岭式"的漏洞代号,但它的分水岭意义不在技术,而在方法:这是第一次由 AI 主导发现、经 OpenAI 协调披露计划走完全流程的基础软件高危漏洞。OpenAI 专门为此开了协调披露页面(openai.com 的 coordinated disclosure 页面),说明"AI 挖洞"已经从研究员的个人玩具,变成了需要制度化流程的正式生产力。
可以预见的是:未来 12 个月,OpenSSL、Nginx、Redis 这些同样历史悠久的 C 代码库,会排着队被 AI 审计一遍。运维同学的补丁节奏只会更快,不会更慢。对 vibe coder 来说,结论很实在——把"保持运行时版本最新"写进你的部署清单,变成和写 README 一样的肌肉记忆。这次是你运气好,提前看到了新闻;下一次,可能是攻击流量先到。
补丁已经发布,链接就在 PHP 官网首页。现在就去升。
评论 (0)
原始来源
相关文章

2026 年 10 月 21 日,Google Cloud 宣布 OpenAI 前沿模型(GPT-6 Astra / GPT-6.1 Sol / GPT-6 Luna)与 Codex 编程 agent 登陆 Model Garden:走 Marketplace 购买、可抵扣云消费承诺,Codex CLI 可直连 Gemini 平台做推理。

10 月 17 日,开发者 Gathin T. 发帖称把爸妈的小米电视"vibe coding"了:Claude Code 经 Wi-Fi 找到电视、停用 25 个广告包、重写桌面启动器。他开源的 cleanyourtv 几天内拿下 10,700 个 GitHub star,覆盖 107 款机型实测。本文拆解让这一切成为可能的 ADB 链路、周末的集体狂欢,以及狂欢之下不应被淹没的三个警告。

OpenAI 10 月 19 日发文,把 COBOL、Fortran、Visual Basic 这些"低资源语言"第一次变成可测量的能力:开源 MultiLangBench(只给文档、从零实现 SQLite 3.40.1,覆盖 20 种语言),外加一套要求字节级一致的 COBOL 迁移测试。GPT-6.1 Sol 迁移准确率从上一代的 5.4% 干到 97.9%。但所有数字都是 OpenAI 自报的——本文逐项打折,并给出三条给老系统维护者的实操建议。