科技

PHP 的两个 9.2 分漏洞:这对企业意味着什么,拖延又要付出多少代价

10 月 21 日发布的 PHP 紧急更新和 CERT-EU 的紧急警告,几乎与每一家拥有网站或网店的公司都有关。我们用损失的语言来讲清风险:到底什么受到威胁、攻击者在多长时间内就会动手,以及企业主至少要做哪些事。

PHP 的严重漏洞:升级不能再拖——SmartGT 的文章
Коротко
  • 发生了什么 — PHP 8.5.12、8.4.27、8.3.36 和 8.2.35 这几个紧急版本已经发布——它们修补了两个评分为 9.2 分(满分 10 分)的漏洞。
  • 代价有多大 — 网站被攻破,意味着销售停摆、域名上黑名单、邮件到不了客户手里。开出账单的不是攻击者,而是停下来的生意。
  • 该做什么 — 弄清 PHP 版本,在自己的分支内升级,重启 php-fpm 或 Apache。其余措施只能降低风险。

2026年10月21日,PHP 团队发布了紧急更新,而欧洲网络事件应急响应团队 CERT-EU 发布了紧急警告。两个漏洞的危险评分为 9.2 分(满分 10 分) ,攻击者无需登录、密码,也无需公司员工的任何操作,就能在服务器上执行自己的代码。

对企业来说,这不是一条抽象的技术新闻。PHP 是大多数网站所使用的语言:WordPress、Joomla、OpenCart、Bitrix、Laravel,还有数百个把网站与 CRM、邮件或 1C 连接起来的自制脚本。如果您的公司有网站、网店或客户专属后台,那么问题只剩一个:您是否来得及完成更新。

究竟发现了什么

漏洞共有两个,评分都是 9.2 分,并且都导致同一个结果:无需授权即可在服务器上执行他人的代码。

CVE-2026-109618 — 内存不足时的崩溃

PHP 中有一项设置 memory_limit:占用内存过多的请求会被强制中断。问题在于它究竟是怎么被中断的。PHP 可能在请求的内部数据只填了一半时就中断——例如正在解析通过上传表单发来的文件。这类请求结束后的清理工作会把未完成的数据当成真实数据,试图释放从来不存在的内存。而那块内存里,可能正放着攻击者通过前面的请求放进去的东西。

CVE-2026-109619 — 上一个请求的残留

第二个漏洞说的是,服务器没有彻底“忘掉”上一位访问者。原本属于某个请求的内部状态,有时会在内存释放之后仍然留存——比如在一次致命错误之后。落到同一个工作进程中的下一个请求,能在常规初始化把它清零之前就用上这些残留。

受到威胁的是任何对外处理网页请求的 PHP 安装:PHP-FPM、Apache 搭配模块 mod_php, php-cgi、FrankenPHP、LiteSpeed。PHP 团队认为最危险的恰恰是 Apache 搭配 mod_php ——这种组合在许多廉价主机上至今仍是标准配置。

演示用的漏洞利用只需一个未授权请求就能成功——甚至在网站自身的代码开始运行之前。也就是说,安全插件、复杂密码、双因素认证在这里都帮不上忙:攻击发生在更低的一层。

哪些版本受到威胁

低于这些版本的一切都是脆弱的:

PHP 分支安全版本
PHP 8.58.5.12
PHP 8.48.4.27
PHP 8.38.3.36
PHP 8.28.2.35
PHP 8.1 及更早版本已无支持

另一类风险是那些内部嵌有 PHP、从外面却看不出来的商业产品和开源产品:管理面板、网络设备、视频监控系统、企业门户。这类软件的清单收录于 荷兰 NCSC 的代码仓库.

这会让公司付出多少代价

没有人会专门来找您的公司。当利用示例被公开之后——而它们已经公开了——几个小时内就会有自动扫描器启动,把整个互联网逐一扫一遍。它们不在乎这是一家工厂的网站还是一家理发店的页面:唯一重要的是服务器是否以一个有漏洞的版本作答。

接下来开始的就是要用钱来算的部分。服务器上被植入 webshell,网站开始散发垃圾邮件或别人的广告,域名进入黑名单——从它发出的邮件也就到不了客户和合作伙伴手里。这期间商店卖不出东西,销售人员收不到询单,而搜索引擎已经来得及把网站标记为危险。恢复不是一个晚上的工作,而是清理、重新签发密钥、更换密码,以及把域名从黑名单里捞出来,这一过程会持续数周。

另一类风险是数据。如果服务器上存着客户数据库或订单记录,数据外泄就不只是一次技术事故,还意味着客户和监管机构会向公司追问。

该做什么——分步说明

  1. 弄清自己的版本。 在主机控制面板里,这是“PHP 版本”或“PHP Selector”一项;在自有服务器上,则是命令 php -v。重要的是查清网站实际运行的版本,而不是命令行里那个版本:两者常常不同。
  2. 在自己的分支内升级。 从 8.2.29 升到 8.2.35 是同一分支内部的修补:兼容性不变,网站不会因此出问题。不要把它和从 8.2 升到 8.4 混为一谈——后者确实需要测试。
  3. 如果您用的是 8.1 或更早的版本 ——这些分支已经没有支持。鉴于形势严重,PHP 安全团队也为 7.4、8.0 和 8.1 发布了最小修补,部分主机商还维护着自己的构建。但正确的做法是迁移到受支持的分支,而且最好现在就做计划,而不是等下一次。
  4. 重启处理程序。 如果不重启 php-fpm 或 Apache,工作进程仍会运行旧代码,更新实际上不起作用。
  5. 检查结果。 最简单的办法是放一个带 phpinfo()的临时页面,检查完立刻删除;或者在重启之后查看面板中的“PHP 版本”一项。

使用虚拟主机的用户大多不必自己动手:大型服务商提前拿到了补丁,会自行更新自己的机器。值得给客服写上一行——“PHP 是否已更新到 2026年10月21日 的版本”——并把答复拿到书面上。

如果现在就升级行不通

有时网站太旧,升级需要准备。那就还有一些临时措施,可以缩小攻击的时间窗口:

  • 堵住内存溢出这个入口: memory_limit=-1,并且要设置成应用无法覆盖,同时检查没有任何池或目录把限制改回去;
  • 减小 post_max_size ——不上传文件的网站设为 8M,需要上传则设为 32M,而 upload_max_filesize 要保持更低;
  • 关闭 session.upload_progress.enabled ,并重启所有工作进程;
  • 在 PHP 8.5 上还要额外关闭 fatal_error_backtraces;
  • 在 Web 服务器或代理这一层限制请求的大小和复杂度。

这些措施中没有任何一项能让环境变得安全。它们只是堵住了已知的路径——真正彻底解决问题的只有升级。

如果连这一点也做不到,CERT-EU 给出的建议简单却不受欢迎:在补丁安装并验证完成之前,把有漏洞的服务从公网上撤下来。

资料来源


如果公司里没有人负责服务器上的版本和更新,可以把审计交给外部来做——例如交给 SmartGT:他们会检查这些资源,并直接告诉您是否存在威胁以及该怎么办。

本文作者 — SmartGT。原始出处: “PHP 的严重漏洞:升级不能再拖”.

PHP 的两个 9.2 分漏洞:这对企业意味着什么,拖延又要付出多少代价 - AGGR World