10 月 20 日,PHP 核心团队披露了两个代号 PHP2Shell 的漏洞:CVE-2026-109618 与 CVE-2026-109619,CVSS v4.0 评级均为 9.2,都属于无需身份验证的远程代码执行。前者是内存破坏(out-of-memory corruption),后者负责把它锻造成可靠的 RCE。Wiz 把两个洞串成一个叫 php2shell 的脚本,公开演示了未登录直接打穿。修复版本第二天发出:8.5.12、8.4.27、8.3.36、8.2.35。CISA 同日发警报催升级,在野利用尝试已经有报告。
真正让人头皮发麻的是影响范围:PHP 5.4 到 8.5,约等于"所有还在对外服务的 PHP"。mod_php、PHP-FPM、php-cgi、FrankenPHP、LiteSpeed 全部在列,其中 Apache 的 mod_php 最危险——未认证的 HTTP 请求在业务代码运行之前就能触发漏洞。Palo Alto 确认 PAN-OS 和 Panorama 全系受影响,因为底层嵌着 PHP。
还有两个细节值得一提。漏洞细节在官方发布前泄露过一轮,修复版发出 24 小时内各家检测规则就已铺开,攻防双方都在抢时间。而官方修复只覆盖 8.2 到 8.5——8.1 及更早的分支已经过了安全支持期,连补丁都没有,想活命只能升级大版本。
地基还是它
聊 PHP2Shell 的杀伤力,得先说清 PHP 现在站在什么位置。
W3Techs 的最新统计里,服务端语言可识别的网站中 PHP 占 69.3%,第二名 JavaScript 是 8.2%。这不是领先,是断层。再叠一层:全世界四成多的网站直接跑在 WordPress 上,而 WordPress 就是 PHP 写的。"PHP 过气了"这句话说了十年,数据上一直没成立——它确实在缓慢收缩,但断层没有变化。
PHP 本体也不丢人。8.x 带着 JIT 和重写过的引擎性能,Laravel 和 Symfony 撑起的现代生态一点不老气,新项目选 PHP 8.3+ 是完全正当的决定,65.4% 的 PHP 站点已经跑在 version 8 上。
问题出在剩下的 35%:停在 7.x 甚至更老,不少连维护者都没了。PHP 的市场地位决定了它的每一寸攻击面都通向半个互联网,而版本长尾决定了这些攻击面里相当一部分永远等不来补丁。PHP2Shell 把这两件事同时摊上了桌面。
上一个样本:披露 24 小时后的勒索潮
PHP2Shell 不是凭空出现的。回头看 CVE-2024-4577:PHP 在 Windows 上以 CGI 模式运行时的参数注入,CVSS 9.8。系统字符集是 GBK 这类编码时,0xAD(软连字符)会被 best-fit 转换"还原"成连字符 -,攻击者用 %ADd 绕过过滤,把 -d allow_url_include=1 直接塞进 php-cgi。
# 原理示意(来自 Wiz 与 Akamai 的公开分析),用于自查资产,不是攻击教程
curl "http://target/php-cgi/php-cgi?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"它是 2012 年 CVE-2012-1823 的还魂。2024 年 6 月 6 日发补丁,24 小时内出现大规模在野利用,TellYouThePass 勒索软件跟着进场。因为漏洞只影响特定字符集配置,重灾区集中在 Windows 加简体中文环境的机器上。到 2025 年 3 月,Bitdefender 还在报告新一轮大规模利用——披露一年半,攻击没停过。不是洞难修,是总有人不打补丁。
AI 开始下场
内核的 9.2 分只是零头。Patchstack 的年度报告:2025 年 WordPress 生态披露 11,334 个新漏洞,比前一年多 42%,91% 出在插件里,核心全年只有 6 个;再往前一年是 7,966 个,两年涨了将近一倍。每年上万个洞,攻击者自己都读不完——这个数字涨这么快,靠的不是黑客变多,是发现漏洞的成本塌了。
2024 年 10 月,Google Project Zero 的 Big Sleep(前身叫 Naptime)报了一个 SQLite 的栈缓冲区下溢,第一个由 AI agent 找到的、真实世界可利用的 0-day,并且在被武器化之前交给了维护者。2025 年 7 月它又找到 CVE-2025-6965——情报显示这个洞当时已被威胁组织掌握,AI 抢在滥用之前把它挖了出来。
2025 年 8 月 DEF CON 决赛,DARPA 的 AI Cyber Challenge 把 400 万美元大奖给了 Team Atlanta 的 ATLANTIS 系统:对真实开源项目全自动挖洞、自动写补丁,团队复盘里记了 6 个真实 0-day(3 个 Java、3 个 C)。第二名 Trail of Bits 的 Buttercup 更有意思——比赛结束后,它还在比赛用的真实项目里继续报漏洞。
赏金市场也换人了。2025 年 6 月,AI 渗透工具 XBOW 成为 HackerOne 美国榜第一个非人类榜首,路上报了 285 个漏洞。HN 上有人泼冷水:那是声誉积分榜,不完全等于技术水平。这话没错,但榜首第一次换成 AI,"挖洞是手艺活"这个二十年的假设就塌了一半。
离 PHP 最近的两例:这次 PHP2Shell 本身,Wiz 的研究报告就写明了有 AI 参与——AI 挖出漏洞、AI 串成 exploit、全球抢修,一套流程几天跑完。再往前,2026 年 8 月,Wordfence 的 AI 辅助审计系统 Argus 在 Tutor LMS 插件里发现 PHP 对象注入(9 月中披露),约 10 万个站点暴露在 RCE 风险下。发现者不是熬夜读代码的白帽子,是按批扫描的系统。
这对写 PHP 的人意味着什么
过去挖一个洞,是高级研究员花几周甚至几个月盯一个目标,所以长尾的小项目是安全的——不是没有洞,是"没有值得派人来看的价值"。AI 把这层保护直接拿走了:扫描一万个插件的边际成本趋近于零,长尾全部暴露。
攻击侧:发现 ──▶ 验证 ──▶ 武器化投入实战
AI 之后:分钟级 ──▶ 小时级 ──▶ 小时级
防守侧:厂商补丁 ──▶ 依赖更新 ──▶ 用户真的打上
天级 ──▶ 周级 ──▶ 也许永远没有两条时间线在赛跑,而防守侧的终点线取决于千万个互不相识的运维者。落到动作上:
- PHP2Shell 的处置很明确:升到 8.5.12、8.4.27、8.3.36 或 8.2.35 并重启服务;跑在 8.1 及以下的别等补丁了,规划大版本升级或下线。实在动不了的 PHP 8.5 环境可以临时把
fatal_error_backtraces设为 0 止血。 - 还在用 mod_php 的,认真考虑迁到 PHP-FPM——这次官方自己点名 mod_php 最危险。
- 停止维护的插件是仓库里的定时炸弹,AI 只是在加速引信点燃——补丁债会集中爆发。
- 防守侧没有理由不用 AI:CI 里挂静态扫描和 fuzzing,依赖自动更新别再手动关掉,关键路径定期跑一遍 AI 审计。
单点 0-day 不可怕,可怕的是同一类 bug 在你的依赖树里出现十次,而 AI 恰好擅长按类找。
开源从来不等于有人在看。维护者合并了上游的安全补丁,也不等于你的线上站点打了补丁——中间隔着一次升级操作,而这次操作可能永远没人做。
AI 把挖洞的成本打了下来,PHP 庞大的存量又让每个洞都放大成世界事件。这笔债迟早要还,现在开始计息。