2026 年 10 月 21 日,PHP 官方在同一天的公告里放出四个新版本:8.5.12、8.4.27、8.3.36、8.2.35。这不是例行小版本维护,而是修补两个可以让未登录者在服务器上直接执行任意代码的严重漏洞。安全界给这组漏洞起了个名字:php2shell。
10 月 22 日,国家网络安全通报中心通过微信公众号发布《PHP 远程代码执行高危漏洞预警》,编号 CVE-2026-109618、CVE-2026-109619,国内对应的 CNVD 编号为 CNVD-2026-41674、CNVD-2026-41675。
事情经过:一条 POST 请求就能绕过登录
两个漏洞都出在 PHP 核心层,不在任何框架里。
第一个 CVE-2026-109618(GHSA-w8hw-w9fx-j79w)跟内存耗尽的处理顺序有关。PHP 在内存不足时中断请求,如果此时内部请求数据才初始化了一半,随后的清理流程会把那段无效数据当成正常数据接着用,于是出现内存破坏。PHP 官网把这称为「RCE via OOM corruption」。
第二个 CVE-2026-109619(GHSA-6wmf-4rv5-p3rp)是典型的释放后复用。请求持有的内部状态,在底层内存被回收之后依然存在;同一个 worker 处理下一个请求时,会直接读到这块失效内存里的内容。
两者可以配合:攻击者构造一条 multipart POST 上传请求发出去,不需要账号,不需要诱导任何人点击,就能在 PHP 工作进程的账户下执行代码。由于 WordPress、Drupal、Joomla、Magento 等主流 CMS 都跑在 PHP 上,影响面几乎覆盖了整个互联网的内容站。
PHP 官方在公告里明确点名了风险排序:所有处理 Web 请求的安装都受影响,包括 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP 和 LiteSpeed;其中 mod_php 风险最高,已经有演示证明未授权请求可以在任何应用代码运行之前完成攻击。这组漏洞的 CVSS v4.0 评分为 9.2。
影响版本:PHP 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 及更早版本。
时间线里更值得警惕的一段
根据 AWS 公布的信息,其 MadPot 蜜罐在 10 月 17 日就记录到了针对这组漏洞的利用尝试,比 CVE 正式披露早了四天;流量来自某个商业匿名网络,也就是说在补丁发布的窗口期之前,至少有一批人已经在真实环境里试过这个漏洞。AWS 随后发布了 AWS WAF 缓解规则。
这段四天的时间差意味着一件事:如果你是在 10 月 21 日之后才升级的,中间那几天你的 PHP 处于「攻击手法已存在、补丁刚公开」的状态,而公开本身又会让攻击量暴涨。这也是为什么多家机构在预警里都写了「已导致多国网站大规模紧急下线」。
对站长和开发者的影响
先说升级。升级到安全版本之后必须重启 PHP-FPM 或 Apache,光改版本号不重启进程等于没打补丁,这一点南京农业大学和南通大学的信息化部门在各自的通告里都单独拎出来强调过。
再说跑在老版本上的站点。PHP 项目现在只维护 8.2、8.3、8.4、8.5 四个分支,8.1 及更早版本不再有官方更新。官方这次额外提供了针对 PHP 7.4、8.0、8.1 的最小化源码补丁,给那些从源码构建、拿不到厂商 LTS 支持的人用;一部分 Linux 发行版和 LTS 厂商在公开前就拿到了补丁,可以找自己的供应商要更新包。
如果你现在升级不了,下面几条是 PHP 官方给的临时措施,只能降低暴露面,不等于安全:
- memory_limit 设为 -1,而且要用 FPM pool 或 Apache 配置里的 php_admin_value 写死,避免应用改回去;官方特别提醒不要用 RLIMIT_AS 或 RLIMIT_DATA 替代,那反而会触发漏洞依赖的分配失败。
- 调低 post_max_size:不需要文件上传就设 8M,需要上传就设 32M,upload_max_filesize 保持在它之下。
- session.upload_progress.enabled 设为 0,并重启全部 worker,用来阻断 CVE-2026-109619 已确认的会话路径。
- PHP 8.5 额外设 fatal_error_backtraces = 0,同样要重启 worker。
- 清掉那些每请求写入、会在初始化前抛出诊断信息的无效或已废弃配置;用 error_reporting、display_errors 或 @ 掩盖报错是没用的。
站长的判断
我的取舍很明确:这次不要指望 WAF。
南通大学信息化中心的通告里有一句话说得很实在——WAF 只能作为临时缓冲,既不能百分百拦住变种,也防不住绕过 CDN 直连源站的攻击。这两个漏洞出在 PHP 自身的请求生命周期上,而不是某个应用函数上,任何基于特征匹配的规则都存在绕过空间。真正靠得住的只有升级 + 重启。
第二个取舍是:不要用「我们是小站、不会有人盯上」来说服自己。这次被四天前就捕获的利用尝试,说明攻击者在补丁公开前已经在批量扫描蜜罐以外的目标了。对内容站来说,被拿下之后的损失不是数据,而是整站被挂马后被搜索引擎降权——这个恢复周期以月计,远比今晚停站十分钟升级要贵。
第三,借此把之前用 SSD/HDD 之类的方式攒下来的旧 PHP 清理掉。8.1 已经在官方支持之外,继续跑只是在赌 LTS 厂商会一直做移植。
自查清单(截至 2026-10-22,版本信息以 php.net 官网为准)
php -v看版本,低于 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 一律要升。- 确认运行模式:宝塔、LAMP 里的 mod_php 优先级最高。
- 升级后重启 PHP-FPM 或 Apache,并确认 worker 是新起的。
- 拿不到新包的发行版,改用 Docker 镜像或第三方仓库(如 sury / remi)。
- 上线前跑一遍 phpinfo 确认 memory_limit 与 session.upload_progress 的实际生效值。
来源清单
- PHP 官网公告《Security advisory: Critical remote code execution vulnerabilities, update now》(2026-10-21,php.net)
- PHP 官网归档条目 https://www.php.net/archive/2026.php#2026-10-21-5
- 国家网络安全通报中心《PHP 远程代码执行高危漏洞预警》(2026-10-22,澎湃新闻、界面新闻转载)
- 南京农业大学《PHP 高危远程代码执行漏洞(CNVD-2026-41674、CNVD-2026-41675)紧急预警》(2026-10-21)
- 南通大学信息化中心《"php2shell" 远程代码执行漏洞风险通告》(2026-10-22)
- The AI Brief, "Microsoft Guardian Agents, Anthropic-Nscale, Granite Speech"(2026-10-22,aibreakingwire.com)
转载请注明:php2shell 来了:两个 CVE 让未登录者直接执行代码,WordPress 站长今晚就得升级 | 聚合信息网