“PHP 全版本中招,关你什么事?”
PHP 全版本中招,关你什么事?
2026 年 10 月 21 日,PHP 官方发布紧急修复,堵上两个未认证远程代码执行漏洞(CVE-2026-109618 和 CVE-2026-109619),CVSS v4.0 评分均为 9.2。欧盟委员会、ENISA、CERT-EU、Europol EC3 和各国 CSIRT 罕见地发了联合声明。
这篇文章对普通人的意义只有一句话:你平时访问的网站、买东西的网店、甚至有些银行 App 的背后,跑的都可能就是 PHP。网站被攻破的那天,受害者名单里会有”只是逛了该网站的人”——包括你。
你不写 PHP,不用管版本号。但你要知道攻击者拿下网站之后会对你做什么,以及你自己那部分该怎么防。
〇、对号入座:这件事和你有几毛钱关系
| 你是谁 | 这件事对你的影响 | 你要做的事 |
|---|---|---|
| 纯网民(不建站,只刷网站/用 App) | 无直接影响,但有间接伤害:你常去的小网站被黑后,可能被插入假登录框、跳转诈骗页、拖走数据库 | 看第六节,2 分钟能做完 |
| 有自己网站/博客(WordPress、Discuz、各种开源程序) | 直接命中。你的站跑的就是 PHP,两个漏洞全版本中招 | 升级,见第五节 |
| 用国内云主机/虚拟主机建站 | 直接命中。很多主机商用发行版打包的 PHP,能不能升级看主机商 | 开工单,见第五节 |
| 公司/店里有人维护官网,或你托给了乙方 | 直接命中,且你可能根本不知道官网跑什么 | 把第五节甩给维护方,问三个问题 |
一、发生了什么:两个漏洞,”内存记账”出了错
PHP 是一门跑了三十年的老语言——全球超过四成的网站用它搭建,WordPress 一家就占了其中大头,还有海量网店、论坛、小程序后台、公司官网。
这次的两个漏洞,根子是同一类问题:PHP 管理内存时”账记错了”。打个比方,PHP 处理每次网页请求,都像仓库管理员记账——哪些货位堆了东西、哪些是空的、哪些该清走。两个漏洞分别是两种记错法:
CVE-2026-109618:清场时把没登记的东西当垃圾扔了
PHP 有个”内存上限”(memory_limit),请求快撑爆内存时,PHP 会执行紧急清场(内部用一个叫 longjmp 的机制,直接中止当前请求)。问题在于:如果中止发生在请求数据只解析了一半的时候——最典型的场景是上传文件——清理阶段会把这份”半成品”数据当成”完整的垃圾”处理掉,把它占用的内存释放。而那块内存里,还残留着攻击者早前请求时塞进去的数据。
结果:攻击者能通过精心构造的请求,让 PHP 把他控制的数据当成合法数据使用,进而破坏内存结构、执行任意代码。
CVE-2026-109619:门禁卡注销了,卡还在刷
请求结束后,它的一些内部状态本该跟着内存一起”注销”。但这个漏洞里,这些状态在内存已被释放后依然存活(术语叫 UAF,Use-After-Free)。同一个工作进程处理下一个请求时,在正常初始化重置之前,就可能读到这份”过期状态”——就像门禁卡已经注销,却还能刷开已经换锁的房间。
两个漏洞叠加的可怕之处:不需要任何账号、不需要登录、不需要你先干任何事,一个构造好的请求打过去,代码就可能在网站服务器上执行。这就是”未认证 RCE”(远程代码执行),也是 9.2 分的原因。
二、为什么这次影响面这么大
第一,所有版本都中招。 不是”只有老的 PHP 8.1 危险”——从 7.4 到 8.5 全线 affected。手里版本再新也没用,这是设计层面的缺陷,不是老毛病。
第二,几乎所有跑 PHP 的方式都中招。 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed,一个没跑掉。其中 PHP 团队点名 mod_php 风险最高:未认证请求可以在应用代码执行之前就触发漏洞——你的 WAF、你的应用层防护,根本来不及拦。
第三,PoC(概念验证代码)已经开始流传。 目前没有确认的大规模主动利用报告,但这个时间窗别赌。
受影响范围速查:
| 环境 | 是否中招 | 说明 |
|---|---|---|
| PHP 7.4 / 8.0 / 8.1 | 是 | 官方已停更,靠发行版/LTS 厂商 backport |
| PHP 8.2 / 8.3 / 8.4 / 8.5 | 是 | 升级到对应修复版,见下表 |
| PHP-FPM / php-cgi / FrankenPHP / LiteSpeed | 是 | 全运行方式中招 |
| Apache mod_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 | 官方已停更;找发行版/LTS 厂商要 backport,或打官方最小源码 backport |
三、网站被拿下之后,你会怎么被害(重点章节)
这是整篇文章和普通人关系最大的部分。攻击者拿到网站的 RCE 权限后,常见四种玩法,每一种的账单都记在你头上:
1. 插入假登录框,钓你的账号密码
攻击者给你常去的网站加一段”登录框”——样式和真的一模一样。你输入账号密码,数据直接进攻击者口袋。如果你在这个网站和其他地方用了同一个密码,牵连一片。
2. 把访问者跳转到诈骗页/挂马页
你点开一个正常网址,被悄悄跳转到”中奖通知””积分兑换””冒充客服退款”页面——域名看起来还像那么回事。或者页面被植入”挂马”代码,你的手机/电脑访问即可能中毒。
3. 拖库
把网站整个数据库拷走——里面有你注册时留的邮箱、手机号、订单记录。接下来就是撞库、精准诈骗、”您的订单异常”钓鱼短信一条龙。斯诺登式的数据泄露对你是抽象的,但”我买过东西的店被拖库”是具体的。
4. 拿你的机器挖矿/当跳板
网站被插入挖矿脚本,你的手机访问时 CPU 被榨干、疯狂发热、电量狂掉——很多人以为”手机老了”,其实是网站在偷你的算力。
看出来了吗:漏洞是网站的事,伤害是双向的。 网站主修不修漏洞,决定你会不会成为上面四种剧情的主角。
四、这次官方还给了个”止痛药”(临时缓解)
来不及打补丁的,PHP 官方给了个临时缓解措施——在 PHP-FPM 配置里加一行:
# /etc/php/<版本>/fpm/pool.d/www.conf 的 [www] 段内
php_admin_value[memory_limit] = -1
原理:让内存上限变成”无限制”,第一个漏洞依赖的”内存爆满→紧急清场→记错账”链条就断在第一步——压根不会触发清场。
但有三个必须说清的限制:
- 它只堵 109618,堵不住 109619(UAF 那条路径)。打补丁仍是唯一真修复。
-1是无限制:有内存失控的请求不再被 PHP 掐断,可能一路吃到被系统强杀。需配合request_terminate_timeout等 FPM 保险丝。- 共享主机用户改不了——这本来就是主机商的责任,你的活是去确认他们打了 backport。
五、你该怎么做(按身份领任务)
如果你是网站主(自己有站)
php -v看版本,对照第二节表格升级;- 升级不了(≤8.1 或共享主机)→ 开工单问主机商:”CVE-2026-109618/109619 的 backport 打了没有?什么时候打?”——问不到明确答复就换商;
- 顺手排查第三方组件:NCSC-NL 维护了一份内嵌 PHP 的产品清单
github.com/NCSC-NL/php2shell,你用的主题/插件/小程序框架如果在列,等厂商更新; - 已经中招的迹象排查:异常进程、不明外联、webshell 文件。
如果你只是”公司有人管官网”
把这三个问题甩给维护方/乙方,答不上来就升级处理:
- 官网跑在什么 PHP 版本上?在不在修复列表里?
- 这次两个 CVE 的补丁/backport 什么时候打?计划是什么?
- 最近一周服务器有没有异常进程和外联记录?
如果你纯上网(大多数人)
你改不了网站,但能把”被害”的那半边守住:
- 给重要账号开 2FA(两步验证)——尤其是邮箱、支付类。网站被拖库,密码一样能拖走你的账号;
- 别信”XX网站”发来的链接,尤其是带”订单异常””退款””中奖”的短信和邮件,哪怕域名眼熟;
- 常用小网站行为异常就停用:突然乱跳转、弹陌生登录框、手机访问后发热卡顿——停用,如果在该站用过密码,去把那个密码改了(以及用同样密码的其他地方);
- 装好系统和浏览器更新。这一条防的是”挂马”那一路。
六、结尾:漏洞不挑人,分工看位置
这件事最值得记住的一点:一个网站后台的漏洞,伤害的却是前台刷网页的人。
技术圈负责修漏洞——升级、打补丁、排查组件,这是网站主和主机商的事;而你负责的那部分同样具体:2FA 开起来、陌生链接不点、常用网站不对劲就撤。两边都做好,攻击者的四种玩法才都落不了地。
修补有分工,安全没旁观者。
> 事件来源:PHP 官方安全公告(2026-10-21 13:30 UTC)、ENISA、CERT-EU 2026-018、加拿大 AL26-026、英国 NCSC。文中修复版本号与 CVE 编号以官方公告为准。