PHP2Shell漏洞披露时间线和修复过程是怎样的

梦墨大大_7918

梦墨大大_7918

2026-10-22

549人浏览

原创

php2shell的修复经历了早期线索、可利用性确认、协调修补与提前发布多个阶段。整理时间线时,要区分原定披露、公开预告和补丁实际生效,不能把公告日期直接当成自己服务器已经安全的时间。

PHP基金会官方复盘记载信息外传、公开预告及发布安排提前的过程(封面裁切)

最早漏洞线索与最终RCE确认并非同日

参考PHP基金会事后发布的复盘文章,2024年修复外部审计发现的问题时,团队曾发现OOM缺陷线索,但当时没找到具体利用路径。

2026年7月30日Calif启动相关审计,8月11日Calif上报了同根因的RCE漏洞,同一天OpenAI也上报了同一个根因的问题,后续还有其他人上报了更多利用路径。

因此,“2026年10月公开披露”不等于漏洞在10月才出现。早期线索、确认影响、补丁完成、对外公开是不同节点;没有一手记录的日期,不用媒体猜测或页面抓取日期补齐。

几个可公开核验的关键时间点

时间 事件 阅读时的边界
2024年 发现OOM问题早期线索 不等于当时已有完整RCE链
2026年8月11日 收到同根因RCE报告 不是公开披露日
10月20日 编号外传、发布公开预告 对照UTC与本地日期
10月21日 官方安全公告及修复版本发布 不代表所有镜像与节点同步完成

基金会复盘称,10月20日约15:00 UTC编号开始流传,19:30 UTC发布预告,并把原定10月22日14:00 UTC的发布安排提前到21日14:00 UTC。本文只转述已公开的节点,不将流传信息当作攻击成功证据。

PHP基金会官方复盘记载信息外传、公开预告及发布安排提前的过程

部分公告标21日、部分标22日的原因

Ubuntu官方说明保留了原协调披露安排及提前原因;PHP官网20日预告写的是调整后的21日14:00 UTC。两者描述不同阶段,不应删掉语境后认定其中一个日期错误。

21日14:00 UTC对应北京时间21日22:00;20日19:30 UTC的预告则对应北京时间21日03:30。官方归档的20日发布日期与国内读者看到预告的21日,可以指向同一时间段。

官网预告标注的是调整后的发布安排,不代表所有安全公告页、源码镜像和发行版仓库精确到秒同步更新。复盘自身处置流程时,要单独记录补丁下载、安装、进程替换和业务验收的本地时间。

PHP官方20日预告中的21日14时UTC发布安排

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

修复难点覆盖整个请求生命周期,不是单靠拦截异常输入就能解决

PHP2Shell包括CVE-2026-109618和CVE-2026-109619。

OOM路径可能在初始化尚未完成时终止请求,清理阶段误用无效数据;另一问题则是请求内存释放后仍残留引用,后续请求可能在正常重置前使用它。

请求终止不等于整个工作进程退出,只封堵单个触发点也不等于修正全部状态生命周期。

基金会解释,修复方案需要权衡兼容性、性能及扩展生态,资源与决策流程也造成了延误。复盘同时提出改进决策和协调机制,不能将这段历史简写成“发现后立即修好”。

本次发布了哪些版本,运维怎么落地补丁

PHP官网21日公告给出的上游修复版本是8.5.12、8.4.27、8.3.36和8.2.35。旧分支是否获得供应商回补,须查看维护方的完整包号与支持条款,不能只按前面的PHP版本数字判断。

PHP官方21日安全版本发布记录及必须更新的提醒

部署来源 核验依据 未结束的工作
上游源码或二进制 官方版本、来源与校验记录 扩展回归、替换进程及所有副本
发行版维护包 供应商公告和完整包号 确认仓库同步、服务生效及业务回归
  1. 留存好公告、安装来源、完整包号和维护责任人信息,确认补丁已经同步到实际在用的仓库或构建流里。
  2. 先在受控测试环境验证扩展、登录、上传和后台任务功能正常,再按业务安排滚动替换工作进程。
  3. 逐个节点核对站点实际运行状态,跑完健康检查,记录验收时间;发现入侵迹象时立刻启动专项应急响应。

用PHP转换UTC和北京时间,避免时间线复盘出错

下面是完整的离线时间转换示例,存为audit.php直接运行就行,脚本只会处理公开预告和计划时间,不会扫描服务器,也不会把计划时间误当成补丁实际生效时间。

<?php // 只转换官方已披露的预告与计划时间,不推测实际下载或进程生效时间。
$events=[
    'pre_announcement'=>'2026-10-20T19:30:00+00:00',
    'revised_release_plan'=>'2026-10-21T14:00:00+00:00',
    'original_release_plan'=>'2026-10-22T14:00:00+00:00',
];
$china=new DateTimeZone('Asia/Shanghai');
foreach ($events as $name=>$value) {
    $utc=new DateTimeImmutable($value);
    $local=$utc->setTimezone($china);
    if ($utc->getTimestamp()!==$local->getTimestamp()) {
        throw new RuntimeException('Timezone conversion changed the instant');
    }
    echo $name,PHP_EOL,'  UTC: ',$utc->format('Y-m-d H:i P'),PHP_EOL,
        '  Shanghai: ',$local->format('Y-m-d H:i P'),PHP_EOL;
}
$advance=(new DateTimeImmutable($events['original_release_plan']))->getTimestamp()
    -(new DateTimeImmutable($events['revised_release_plan']))->getTimestamp();
echo 'Plan advanced by hours: ',$advance/3600,PHP_EOL;
echo "Plans are not evidence of package download or production activation.\n";
php audit.php

示例已在macOS的PHP 8.5.10 WebAssembly环境运行,校验转换前后的时间戳一致,并算出发布计划提前24小时。截图是该脚本实际输出,不是生产升级记录。

只读示例的真实运行输出:公开预告和计划时间的时区转换及提前24小时的实际计算结果

梳理处置时间线时,要避开这四个常见误区

  • 把计划时间当成实际完成时间:分开记录公告发布、仓库可用、补丁进程生效三个不同节点的时间。
  • 直接把UTC日期当成国内日期:所有时间标注对应时区,跨日的时间转换完再排序。
  • 把最早发现线索直接说成已确认完整利用:按证据严格区分线索上报、影响确认、公开披露三个阶段。
  • 补丁一发布就判定没有风险:逐节点验收补丁,同时独立排查入侵迹象,不等更新全部完成才开始调查。

一份可追溯的修复记录,必须明确说明谁在什么时间、把哪个补丁部署到了哪些进程,用什么依据完成的验收。公开披露的时间线只能说明事件整体经过,只有自己站点的现场证据,才能证明实际的处置进度。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php2shell漏洞 php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

11184

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6501

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2155

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4108

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4834

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3791

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5437

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4262

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12202

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习