PHP 内核一次修掉两个 CVSS 9.2 的未认证 RCE,社区代号 PHP2Shell。这是近几年离站长最近的高危事件:不针对任何 CMS,也不需要你代码里有 bug。
2026 年 10 月 21 日 14:00 UTC,PHP 官方发布紧急版本 8.5.12、8.4.27、8.3.36、8.2.35,修复 CVE-2026-109618 与 CVE-2026-109619。原定次日协调披露,结果前一天就在 Hacker News 泄露,官方被迫抢跑。Cloudflare、watchTowr、Unit 42 已报告利用尝试与在野利用,CISA 同日发出紧急告警。
漏洞在 PHP 解释器里,不在主题、插件或 Composer 包里,业务代码改不动它。更麻烦的是攻击发生在应用脚本执行之前——登录校验、框架中间件全来不及,哪怕站点只有一个 hello world 的 php 文件也在射程内。触发只需要一个普通 multipart POST 请求,而会话上传进度功能自 PHP 5.4 起默认开启。
|
PHP 分支 |
修复版本 |
说明 |
|
8.5 |
8.5.12 |
活跃维护 |
|
8.4 |
8.4.27 |
活跃维护 |
|
8.3 |
8.3.36 |
仅安全更新 |
|
8.2 |
8.2.35 |
支持到 2026-12-31 |
|
8.1 及以下 |
无官方发布版 |
7.4/8.0/8.1 仅有源码回移 |
唯一完整修复是升级到对应分支的修复版,并重启所有常驻 worker。暂时不能升级的,把下面几项写进 php.ini 或 FPM 池(必须请求解析前生效,ini_set() 和 .user.ini 都来不及):
session.upload_progress.enabled = Off
memory_limit = -1 ; 用 php_admin_value 锁死,别让应用改回去
post_max_size = 8M ; 需要上传的业务用 32M
fatal_error_backtraces = 0 ; 仅 PHP 8.5
不要用 RLIMIT_AS / RLIMIT_DATA 代替内存限制,它制造的底层分配失败正好踩回漏洞路径;关掉 display_errors、降低 error_reporting 也防不住第二个漏洞,诊断信息在你看到它之前就已经读到脏状态。WAF 侧拦截含 PHP_SESSION_UPLOAD_PROGRESS 的 multipart 请求,并限制字段名长度与 multipart 分段、头部数量(含无有效 Content-Length 的请求)。
成功利用不一定会让 worker 崩溃,甚至可能返回 200,所以要三层信号关联看:
一旦对上了,先断网隔离、保全日志和内存现场,不要急着重启——重启会把证据一起清掉。
这次事件被多方拿来和 Log4Shell 类比,区别在于:Log4j 你可以换掉,PHP 你换不掉。用共享主机的站长只有一条路:向服务商索要确切的 PHP 包版本,“我们已知悉”不算答案。另外别乱跑网上流传的“PHP2Shell 一键修复脚本”和 EXP,那是二次中毒的捷径。
A5创业网 版权所有