2026年11月2日星期一
漏洞

两个PHP预认证漏洞,让全球七成网站进入倒计时

两个PHP运行时预认证远程代码执行漏洞已出现可用的利用代码。本文测算打补丁、WAF规则与下线服务的成本与风险。

插图:一座服务器之城坐落在一块布满裂纹的地基板上,象征PHP的共享运行时。
共享运行时中的两个漏洞,让一次补丁发布变成了全球性的维护窗口。

今天早上,全球大约70%的网站需要更换“发动机”,而多数站点的主人并不知道自己的车已经出了问题。PHP针对语言运行时本身的两个严重漏洞发布了紧急修复,即CVE-2026-109618和CVE-2026-109619,合称PHP2Shell。攻击者无需账号、无需凭据,甚至不必发送钓鱼邮件,就能在存在漏洞的服务器上执行代码。可用的利用代码已经出现,利用尝试也已出现在传感器中。由于漏洞位于PHP而非WordPress、Drupal、Joomla或Magento中,即便应用本身已完全打补丁,只要运行时未修补,依然是砧板上的肉。

关键在于覆盖范围。据Krebs on Security报道,Censys近期统计到约258万台面向互联网、运行PHP的主机和5490万个Web资产;Wiz的研究人员表示,过去十年发布的每一个PHP版本都至少受其中一个漏洞影响。受影响的分支可追溯至PHP 5.4。修复版本为PHP 8.5.12、8.4.27、8.3.36和8.2.35。其余的问题,都是你愿意承担多大风险的决策。

沉睡十年,一日失控:时间线

先说令人不安的部分:这些漏洞已经存在很久。Wiz的研究人员写道,相关缺陷已存在数十年,证明其可利用性需要极为复杂的攻击链,直到,用他们的话说,前沿AI模型降低了这一门槛,“让一个古老的缺陷变成了利用代码”。请读两遍。把陈年漏洞武器化的高昂成本已经永久性地降低。无论你如何看待AI热潮,攻击者这一侧的成本曲线已经移动,而且不会再回去。我们此前已经见识过潜伏漏洞浮出水面时的样子,那个存在37年的OpenBSD共享内存漏洞就是同样的教训,只是影响范围较小。

漏洞发现的功劳归于Wiz、Calif和OpenAI的研究人员,他们报告了漏洞,并在发布前与PHP团队就补丁验证和披露进行了协调。OpenAI表示,考虑到PHP的覆盖面,这是近期最具影响力的安全问题之一。随后,时间表被打乱了:据The Hacker News报道,细节于10月20日泄露,比原定10月22日的披露提前了一天。如果你组织过协调披露,就知道泄露对补丁窗口意味着什么:它把以天计的时间压缩到以小时计,并把秒表交给了每一个正在盯着的人。

10月21日UTC时间凌晨3:02,Cloudflare已部署Web应用防火墙规则以拦截攻击流量,并表示已检测到针对这些漏洞的利用尝试,这些漏洞可导致拒绝服务、远程代码执行和数据泄露。同日UTC时间14:00左右,PHP发布了修复版本和安全公告,明确指出只有完整升级才能彻底保护服务器。同样在10月21日,各国政府开始拔掉网线:芬兰政府服务下线,荷兰议会、荷兰网络安全主管部门和荷兰数据保护监管机构的网站也随之离线;隐私组织noyb也暂时撤下了自己的网站,据The Register报道。路透社通过Krebs转述称,欧洲及其他地区的政府网站出于预防考虑也相继下线。

与此同时,攻击方已经开始行动。watchTowr威胁情报负责人Jake Knott告诉The Register,他们的传感器已经看到野外的利用尝试,使用的是他所说的“vibecoded”概念验证代码,带有各种“php2shell”User-Agent。他的判断是:“虽然目前还没有人成功,但我们认为这种情况不会持续太久。”Wiz则预计最终形态是大规模利用并植入Web Shell,相当于你的服务器里有人住进了房间,还换了锁。

这一连串事件告诉防御者什么?三点。泄露压缩了你的窗口期,所以昨天就是打补丁的合适时机。WAF厂商在补丁出现之前就已行动,这说明廉价的时间窗口在哪里。而那些关站的政府,做了我下面要算的账:对某些资产而言,停机比另一种选择便宜。

为什么mod_php服务器要排在队首

并非所有PHP部署的风险都相同,假装它们相同,只会浪费你今晚最宝贵的资源:注意力。PHP项目方表示,所有提供Web服务的安装都可能受影响,包括PHP-FPM、Apache的mod_php、php-cgi、FrankenPHP和LiteSpeed,但明确把mod_php列为风险最高的部署,并展示了一个利用示例:一个未认证请求即可在任何应用代码执行前触发攻击。你的WAF、登录页面、昂贵的零信任网关,全都处在一个从它们上游引爆的漏洞之下。

PHP-FPM的情况好一些,但也谈不上安全。PHP官方分析表明,FPM易受其中一个漏洞影响,但尚未展示针对它的完整利用;第二个漏洞已被证明可在mod_php和FPM上都达到代码执行,不过FPM路径依赖于运行中应用的某个操作。还有一项没人在计算的隐性成本:攻击者即便没有实现代码执行,也能从PHP工作进程中读取内存,包括密码、认证令牌、API密钥以及来自其他请求的证书,研究人员已针对他们无法控制的应用证明了这一点。即使是“失败”的攻击,也可能带走你的机密。请据此预算凭据轮换。

WAF能争取时间,配置调整争取的时间更少,补丁才是真正的修复。

现在来谈董事会真正会问的钱的问题:那些更便宜的选项到底能带来什么?Cloudflare凌晨3:02的规则集确实有价值,它就像一道闸门,在你修门的时候减缓人群涌入。但PHP安全公告明确指出,只有升级才是完整修复,其他手段只是减少特定攻击路径的暴露,并不能让服务器变得安全。如果今晚无法打补丁,部分缓解措施值得今晚部署,但前提是组织里没有人把它们当成“已完成”:

; Stopgap for CVE-2026-109618 — reduces exposure, does NOT fix
memory_limit = -1          ; set centrally so applications can't override it
post_max_size = 8M         ; keep low; also enforce request-size limits at the web server/proxy
; Do NOT rely on RLIMIT_AS or RLIMIT_DATA — PHP warns they can trigger the same vulnerable path
; Stopgap for CVE-2026-109619 — blocks confirmed session paths only
session.upload_progress.enabled = 0   ; then restart every worker
; On PHP 8.5 additionally:
fatal_error_backtraces = 0

会话上传进度功能默认开启,它可能会在PHP完成请求设置之前就进入会话处理,这正是它位于CVE-2026-109619已确认攻击路径之中的原因;而这个在发布前就被当作“解决方案”流传的设置,对CVE-2026-109618却完全没有作用。PHP核心开发者Gina Peter Banyard的说法,比任何分析师都更简洁:

“我能说的只有一点:唯一的缓解措施就是给PHP打补丁或升级。我太清楚这一点了。”这是PHP核心开发者Gina Peter Banyard在回复一项认为某个配置设置可能就够用的建议时写下的话。

因此,诚实的优先级是:先完整升级;WAF规则是你开车去修理厂路上的安全带;配置上的权宜之计只能靠祈祷;对于无法修补又承受不起损失的系统,则进行隔离。CERT-EU将两个漏洞都评为CVSS 9.2,并在补丁发布之前就说过:如果无法立即打补丁,就把面向互联网的应用与公共网络隔离开。这是各国政府的做法,对于没有收入计量的税务门户或议会网站来说,这是理性的选择。但对于周四运营的电商网站,算术就难看得多,这正是为什么你应该现在就算这笔账,而不是等到事件响应期间才算。

插图:三扇门分别代表打补丁、WAF防护和系统下线。
打补丁、加盾或关门:每扇门都有价格,但真正能关上的只有一扇。

真正的成本藏在哪里:盘点,而不是打补丁

补丁本身几乎是免费的。Linux发行版和长期支持供应商已提前收到修复,据Krebs引用的SANS互联网风暴中心跟踪记录,Ubuntu已经发布了更新的软件包;发行版软件包可能会在看起来很旧的版本号下包含修复。正如Debian所建议的,在惊慌之前,或者更糟,在放松警惕之前,请先检查软件包更新日志中的CVE,而不是版本号。PHP项目还为PHP 7.4、8.0和8.1发布了源码回移补丁,这些版本已不再获得更新,适用于从源码构建或在等待供应商更新的用户。PHP 8.2本身将于12月31日停止支持,所以如果这次演练让你吃了苦头,那你已经提前体验了下一次预算会议的情形。

最昂贵的部分是找到所有实例。Huntress高级首席安全研究员John Hammond一针见血地指出:“你需要去查找以确定存在漏洞的PHP版本的地方数量,增长得非常大、非常快。”PHP潜藏在共享主机平台、控制面板、设备以及不声明自身运行时的软件中。更新WordPress或Laravel对底层引擎毫无作用,因为运行时来自服务器软件包、主机或容器镜像。更新之后,你必须重启Apache、PHP-FPM以及所有长时间运行的工作进程,然后重新检查内存设置:此次修复引入了一个新的硬性内存上限,一旦达到,进程就会终止,且不会执行关闭处理程序。在生产环境替你发现问题之前,请先用你的应用实际所需来测试这一点。

Wiz把这对漏洞比作Log4Shell,这次我认可这个类比。原因不是利用方式相同,而是嵌入式扩散的问题相同。PHP遍布各大云平台、托管服务商、CDN以及数百万个独立管理的服务器,Wiz预计各组织还将为此修补相当长一段时间。翻译给CFO听:这不是一个常规的补丁周二,而是一个你没有预算的资产盘点季度。

我的判断

现在就行动,并按此顺序投入:找出你拥有的每一个PHP运行时,先修补mod_php,全部重启,然后用WAF规则和ini配置的权宜之计去追查FPM和容器中的漏网之鱼,但这些只能作为掩护,绝不能替代补丁。如果你运行的系统确实无法修补、风险又确实很高,荷兰议会刚刚给出了诚实的答案。当董事会问AI这个角度是否改变了什么时,请如实告诉他们:它改变的是未来,不是今晚。今晚是打补丁的夜晚。

来源

本文参考了以下报道与公告: