北京时间10月21日晚,PHP官方一口气发布8.2.35、8.3.36、8.4.27、8.5.12四个安全版本,修复两个潜伏在引擎核心里的严重漏洞:攻击者不需要任何账号密码,用一个构造好的请求就可能让服务器执行任意代码。 漏洞编号为CVE-2026-109618和CVE-2026-109619,被安全圈合称为“PHP2Shell”,两项CVSS v4.0评分均为9.2分。 攻击入口是网站每天最普通的日常流量:腾讯云在风险通告中描述,未认证攻击者通过发送特制的multipart POST请求即可触发内存破坏并最终实现代码执行。 对个人站长,结论需要先说在前面:升级是唯一完整的解决方案,WAF、防火墙都只能拖延时间,不能代替补丁。PHP官网360漏洞研究院财联社
为什么这次比寻常的“插件出事”更棘手
以往让站长紧张的通常是某个插件或主题的漏洞,这次问题在所有程序的下方:官方公告写明,风险覆盖一切处理Web请求的PHP环境,包括PHP-FPM、Apache mod_php、php-cgi、FrankenPHP和LiteSpeed,其中mod_php风险最高,已演示的攻击在应用代码开始执行之前就能被触发。 换句话说,网站代码一行没改、插件全部更新到最新,这个“只有一行Hello World的站”也可能不设防。它打击的面也远超直觉:W3Techs的统计中,能识别出服务端语言的网站有69.3%运行着PHP,WordPress以及大量个人博客、小商户站都坐落在这69.3%上。 危险已经不是纸面推演:Cloudflare首席技术官Dane Knecht在10月21日白天就表示攻击已经出现,公司为WAF用户持续更新防火墙规则,但强调这仅是权宜之计,应尽快打补丁。PHP官网新智元华尔街见闻
也无需恐慌:公开利用链尚未“通杀”
两份GitHub官方公告把两个漏洞的攻击复杂度都标为High:利用的稳定性与可移植性取决于PHP的构建、扩展、前端行为与内存分配器布局。 而把“陈旧全局状态”变成完整RCE,还需要攻击者精心设计堆内存布局。360漏洞研究院的复现结论也印证了这一点:已可稳定复现崩溃,但公开的RCE链尚不具备通用性,仍在分析验证中。 但这构不成拖延的理由:原定10月22日晚的统一发布,因10月20日深夜漏洞编号在网上流传而被迫提前了24小时,攻击在补丁发齐之前就已经在路上。GitHub360漏洞研究院新智元
自查第一步:弄清机器上到底“跑着几个PHP”
自查最常见的错误是只敲一条 `php -v`——它只代表命令行版本,网站前端可能跑着另一个PHP。一台服务器上同时存在多个版本很常见:主站8.3、旧站7.4、Docker容器里再跑一个8.4,而宿主机更新PHP不会自动更新容器内的PHP,宝塔类面板单独安装的PHP-FPM也要在面板里另行确认。盘清之后对照官方口径:8.2分支低于8.2.35、8.3低于8.3.36、8.4低于8.4.27、8.5低于8.5.12均在受影响之列;PHP 8.1及更早分支同样可能受影响,且已停止官方维护,官方只为7.4/8.0/8.1准备了最小回补源码补丁给发行版和自编译用户,这些站点更稳妥的出路是迁入受支持的分支。 还有一个陷阱:PHP来自apt、yum等系统源的,发行商可能把补丁回补进原版本号,版本字符串没变化不代表没修复;反过来,“数字低于门槛”也不等于一定带病运行,应去核对发行版的安全公告和更新记录,而不是只比对版本号下结论。 至于虚拟主机的站长,可以直接向服务商确认节点是否完成升级。360漏洞研究院小林通
升级之后别漏最后一步:让进程真正换上新的
装完补丁不等于风险解除,官方修复流程明确要求更新二进制后重启Web服务器与PHP处理进程,否则常驻内存的旧worker仍会继续处理请求。 验证也不要停在命令行:需要经真实的Web请求路径确认版本,事后临时排查可以用OpenAI在22日凌晨放出的版本检查skill,它只查版本、不能代替升级,查不到版本同样不等于安全。知乎新智元
实在来不及升级:官方缓解措施只是买时间
PHP安全团队的表态异常直接:更新才是完整方案,以下措施只能降低特定攻击路径的暴露,不能让安装环境变得安全。PHP官网
针对内存耗尽路径(CVE-2026-109618),官方要求把memory_limit设为-1,并且要用应用无法覆盖的方式生效:优先写在FPM池或Apache配置的php_admin_value里,再检查没有任何池、目录或应用级设置把有限值改回来——把“能被攻击者控制的内存上限”拿掉,触发条件就少了一个。 同时压缩请求面:不需要上传的场景把post_max_size设到8M,确需上传设32M,upload_max_filesize保持在其之下,并在Web服务器或代理层对解码后的请求大小、字段数、分块数设限;可以用容器或cgroup做内存上限,但不要拿RLIMIT_AS/RLIMIT_DATA替代,那本身就是触发漏洞的分配失败之一。PHP官网
针对陈旧全局状态路径(CVE-2026-109619),把session.upload_progress.enabled关掉并重启全部worker——配置必须放在php.ini、FPM池或服务端,在请求解析前生效,ini_set和.user.ini都来不及;PHP 8.5还可加设fatal_error_backtraces=0。更重要的是排查攻击者可触发的致命错误与超时,包括上传、导入、回调和清理阶段的失败,用error_reporting、display_errors把报错藏起来没有用。
还差一个问题:升级之前,有没有已经被人进去过
多数站长的流程是“补完丁、网站能访问、收工”,但修复之前的状态决定要不要更进一步:如果攻击者已经执行过代码,升级PHP既不会自动删除后门,也不会撤销已泄露的凭据。 至少检查:异常进程与外连、最近7天被修改或新增的PHP文件(WordPress站可用WP-CLI校验核心文件快速筛查)、陌生的管理员账号与定时任务。发现可疑先保存证据再处置,并轮换PHP进程权限范围内能接触到的全部凭据;确认被攻破的主机应重建,而不是“升完级当它干净”。小林通
更值得留意的信号
这次事件被业内称为AI进入漏洞发现后的第一次互联网级协同响应:研究者7月底在OpenAI协调下开始用大模型审计PHP,几天找出多条攻击路径,修复则牵扯引擎内存管理重构、发行商打包与防护设备联动,耗时约两个月。OpenAI已经预告,PHP只是其已发现、正在修复的多项重大漏洞之一,预计未来几个月此类发现会显著增加。 对个人站长,真正的收获是把这次应急的流程固定下来:每台机器一份“哪个站跑哪个PHP”的清单,明确可信的更新渠道,升级后重启、验证、留记录,保持独立位置的备份。下一次深夜补洞,至少能十分钟定位受影响范围,一小时恢复。新智元