导语
PHP 项目在 10 月 23 日披露了一个新的远程代码执行(RCE)漏洞,编号 CVE-2026-115560。与几天前紧急修复的 PHP2Shell 漏洞不同,这个新漏洞目前还没有官方补丁。PHP 项目给出的临时办法很简单:在配置文件中关闭会话上传进度功能,并重启所有 PHP 工作进程,直到常规版本发布修复为止。
事件详情:一个暂无补丁的新漏洞
根据 PHP 项目 10 月 23 日发布的安全公告,CVE-2026-115560 与 PHP 的会话上传进度(session upload progress)功能有关。该功能用于在文件上传过程中实时追踪上传进度,默认处于开启状态。PHP 项目没有随公告发布修复补丁,而是表示修复将通过后续的常规版本发布,在此之前建议管理员采用配置缓解措施。
值得注意的是,披露时尚未报告针对这一新漏洞路径的实际利用。
触发条件:需要特殊的会话配置组合
CVE-2026-115560 并不是所有 PHP 环境都会中招,它的触发需要同时满足一组比较特殊的配置条件:
- 应用初始的会话序列化处理器(session.serialize_handler)被设置为 php_binary 或 php_serialize;
- 应用在运行期间通过 ini_set() 把序列化处理器切换为 php,并且在切换之后才调用 session_start();
- 会话上传进度功能保持开启,而这正是 PHP 的默认设置。
换句话说,如果应用从不在运行期间动态改动会话序列化处理器,就不会通过这条路径受到影响。PHP 项目也表示,这种配置组合并不常见。不过,由于会话上传进度默认开启,管理员仍应逐一核查自有应用的会话配置,而不是默认自己不在影响范围内。
不要和 PHP2Shell 混为一谈
同一周内连续出现两起 PHP 安全事件,很容易让人把它们混淆,但两者是相互独立的漏洞,需要分开处理:
- 10 月 21 日,PHP 发布紧急安全版本 8.5.12、8.4.27、8.3.36 和 8.2.35,修复了被统称为 PHP2Shell 的两处严重 RCE 漏洞 CVE-2026-109618 和 CVE-2026-109619。
- 10 月 23 日披露的 CVE-2026-115560 是一个新的、独立的漏洞,上述紧急版本并不包含对它的修复。
- 披露后针对 PHP2Shell 的探测活动急剧增加,有安全厂商报告探测量在一天内从数万次激增至数百万次,Mirai 衍生僵尸网络也被关联到针对 PHP2Shell 的攻击活动中。但这些攻击活动针对的是旧漏洞,不能作为新漏洞已被利用的证据。
因此,已经完成 10 月 21 日紧急升级的管理员并不能就此高枕无忧:旧漏洞修好了,新漏洞的缓解措施仍需单独落实;反过来,还没升级旧版本的环境则要两件事一起做,缺一不可。
管理员现在应该做什么
在官方补丁发布之前,PHP 项目建议的临时缓解措施只有一步,但有几个执行细节需要注意:
- 在 php.ini 中设置 session.upload_progress.enabled=0,关闭会话上传进度功能。
- 修改配置后重启所有 PHP 工作进程,否则已经加载到内存中的旧配置仍会继续生效。
- 关闭该功能不会影响正常的文件上传:通过 HTTP POST 上传文件本身不受影响,停用的只是 PHP 内部的实时上传进度追踪。
- 同时确认 10 月 21 日的 PHP2Shell 紧急升级已经完成,两个漏洞的处置不要互相替代。
此外,安全厂商的数据提醒了一个更长期的问题:仍有大量 PHP 实例运行在已经停止维护的分支上,这些版本永远不会收到官方补丁。对这类环境而言,升级到受支持的版本比单次缓解措施更为紧迫。
背景分析:为什么一周内连出两起事件
PHP 是全球使用最广泛的服务端编程语言之一,支撑着数量庞大的网站和各类应用系统。正因为部署基数巨大,PHP 的任何一处高危漏洞都会迅速成为攻击者扫描和尝试利用的目标,这也是 PHP2Shell 披露后探测量能在一天内暴涨的原因。
从防御角度看,这一周的事件也暴露了一个常见短板:很多团队只关注“打补丁”这一个动作,却忽略了配置基线和进程重启。CVE-2026-115560 的案例恰恰说明,补丁、配置、重启三者缺一不可——官方补丁还没到,配置缓解就得先顶上;配置改了,不重启进程等于没改。
影响与展望
短期内,CVE-2026-115560 的实际风险相对可控:触发条件特殊、暂无野外利用报告、缓解措施成本很低。但风险窗口会随着时间推移而变化:一旦官方修复发布或技术细节被更广泛讨论,针对该路径的探测很可能随之出现。管理员应把关闭会话上传进度作为立即执行项,并持续关注 PHP 项目的常规版本发布,及时升级到包含正式修复的版本。