PHP2Shell漏洞服务器安全防护指南
PHP两个RCE漏洞潜伏14年被AI发现,全球70%网站受影响,补丁发布前攻击已抢跑。本文拆解漏洞原理、影响范围、排查方法与防护方案,附政企网站应急清单。
上周有个做政府网站运维的朋友半夜被电话叫醒——单位官网PHP版本太老,安全扫描报红,领导要求48小时内出整改方案。他翻了一圈安全公告,发现一个叫PHP2Shell的漏洞正在发酵,补丁发布才两天,全网攻击已超百万次。更让他慌的是,他们的PHP版本根本不在官方修复范围内。
这不是个例。10月21日PHP紧急发布安全更新,修复了两个潜伏14年的远程代码执行漏洞,编号CVE-2026-109618和CVE-2026-109619。受影响版本覆盖PHP 5.4.0到8.5.11,也就是2012年以来的几乎所有PHP版本。据W3Techs统计,PHP支撑着全球约七成网站。这两个漏洞不需要任何身份认证,一段构造异常的HTTP请求就能让攻击者在服务器上执行任意代码,或者直接读走内存里的口令和密钥。
漏洞到底怎么回事
先说清楚这两个漏洞在技术上的区别,因为防护方式不一样。
CVE-2026-109618(CVSS 9.2):内存耗尽触发的RCE。 PHP在处理multipart表单上传时,一个没有Content-Length的表单可以绕过post_max_size检查,空文件控件不计入max_file_uploads却仍要分配内存。攻击者利用这一点让PHP在特定时刻耗尽内存,触发longjmp()强行跳出上下文,留下一片半初始化的内存被当作合法数据处理。在Apache mod_php下,这一切发生在你的业务代码运行之前,应用层防护根本拦不住。更狠的是还有一条类Heartbleed的路径,把进程内存写进PHPSESSID响应Cookie,单次可泄露约67KB服务器内存——其他请求留下的口令、令牌、API密钥,原样被带走。
CVE-2026-109619(CVSS 9.2):跨请求状态残留的UAF。 PHP-FPM工作进程按顺序处理多个请求,前一个请求以致命错误收场后,部分全局状态指针在内存释放后依然残留。下一个请求由同一进程接管时,初始化重置还没发生,过期指针已被消费——经典的Use-After-Free。已确认的攻击路径有两条:默认开启的session.upload_progress上传进度追踪,以及PHP 8.5的致命错误回溯功能。进程复用越久,利用越稳定。
14年没发现,AI三天打通
这事最让人后怕的不是漏洞本身,而是它藏了14年。
2024年,开源安全基金会OSTIF委托法国安全公司Quarkslab对php-src做第三方审计,其实已经触及了这批内存异常的苗头。但研究人员始终无法串联出稳定的跨请求利用链,无法证明远程可利用,缺陷被按低风险归档。
转折发生在今年6月。OpenAI启动"Patch the Planet"计划,安全研究员Calif选定PHP作为审计目标。借助GPT-5.6,他在8月1日打通了第一条完整的远程代码执行路径。从开始审计到打通利用链,只用了三天。Wiz研究团队随后用自研工具加Gemini 4 Argon独立验证,在Drupal和WordPress环境中完成了攻击复现。Wiz的复盘原话是:"证明这类缺陷可利用,需要把多个问题串成一条复杂的链,几乎已经到了人类研究员的能力极限。"在模型辅助下,一名研究员用一周完成了过去顶尖团队数月的工作。
补丁本身不是一处代码修补,而是对PHP内存异常处理逻辑的低层级重构——移除OOM时的longjmp(),改为在虚拟机安全点执行优雅降载、超阈值时硬退出,并在请求边界重置全部请求级全局状态。AI用三天证明漏洞存在,人类工程师用两个月才堵住它。
攻击比补丁跑得更快
原本走协调披露流程,补丁定在10月22日发布。但10月17日,亚马逊威胁情报团队的蜜罐就记录到了首次利用尝试,此时漏洞仍在严格保密期内。10月20日,Hacker News出现匿名帖流出CVE编号和攻击工具截图,帖子虽被删除,信息已经传开。Calif团队还误发布了一条未清理干净的POC演示视频,画面内容已被留存。
10月21日补丁发布前数小时,多来源攻击尝试已经开始抵达各安全厂商传感器。补丁发布后45分钟,攻击量升至数万次;两小时后达数十万次;次日累计数百万次。Cloudflare在补丁发布前约9小时就向全量客户静默下发了WAF防护规则,但攻击者开始利用拦截规则的反馈实时变异载荷,试探绕过路径。
更值得警惕的是,TellYouThePass勒索软件已经开始利用类似PHP漏洞攻击未修补服务器。攻击者一旦拿到Web服务进程权限,就会横向移动寻找高价值数据,加密勒索。
政企网站怎么排查和防护
说回实际操作。如果你管着政企网站,以下是一份可执行的应急清单。
第一步:摸清PHP版本底数。 在服务器上执行`php -v`确认版本。重点排查:
| PHP版本 | 是否受影响 | 官方补丁 | 操作建议 |
|---|---|---|---|
| 8.5.0-8.5.11 | 是 | 8.5.12 | 立即升级 |
| 8.4.0-8.4.26 | 是 | 8.4.27 | 立即升级 |
| 8.3.0-8.3.35 | 是 | 8.3.36 | 立即升级 |
| 8.2.0-8.2.34 | 是 | 8.2.35 | 立即升级 |
| 8.1及更早 | 是 | 无官方补丁 | 必须迁移到受支持版本 |
| 5.4-8.0 | 是 | 无官方补丁 | 最高优先级迁移 |
PHP 8.1及更早版本已终止官方支持,只能自行编译源码回补,无法通过包管理器一键更新。大量个人站点、中小企业官网、多年没迭代的遗留系统,几乎不会投入人力完成升级。如果你管的服务器还在跑PHP 5.x或7.x,这才是最大的风险敞口。
第二步:补丁前先上WAF规则。 不要等补丁打完才做防护。在WAF或CDN层添加针对multipart异常表单的拦截规则,过滤无Content-Length的表单提交、空文件控件批量提交、异常PHPSESSID响应头。如果用了Cloudflare或类似CDN,确认是否已自动下发规则;如果是自建WAF,需要手动添加。
第三步:限制PHP-FPM进程复用。 CVE-2026-109619的利用依赖进程复用,临时方案是在php.ini中设置`pm.max_requests=1`,强制每个工作进程只处理一个请求后销毁重建。代价是性能下降,但补丁验证通过后可以恢复。
第四步:关闭非必要功能。 如果业务不需要文件上传进度追踪,在php.ini中设置`session.upload_progress.enabled=0`。这条路径已被确认可利用,关掉直接消除一个攻击面。
第五步:验证补丁,不要盲更。 在测试环境验证PHP 8.5.12/8.4.27/8.3.36/8.2.35与现有应用的兼容性。重点测表单上传、session、大文件处理这几个场景。确认无回归后,按灰度→分批→全量的节奏推生产。
补丁之后,防护不能只靠升级
这次事件暴露了一个结构性问题:传统安全防护高度依赖"打补丁"这一道终点线。但AI正在改变漏洞发现的节奏——发现成本在降,修复成本没降。PHP2Shell是AI三天发现、人类两个月修复。下一个漏洞可能发现得更快,修复窗口压得更短。
对政企网站来说,纵深防御才是正解:
- 边缘防护前置: WAF规则在补丁发布前就应就位,不是等漏洞公开了才找规则
- 进程隔离: PHP-FPM进程定期销毁重建,限制单进程复用次数
- 内存监控: 对Web服务进程做异常内存读写监控,发现可疑行为告警
- 文件完整性校验: 对网站根目录做基线快照,发现非授权文件变更立即告警
- 最小权限运行: Web服务进程以最低权限运行,即使被RCE也限制横向移动能力
我们给深圳几家政企客户做安全运维时,这套纵深防御已经落地。不是每个漏洞都来得及打补丁,但每层防护都能为下一层争取时间。PHP2Shell证明了攻击会抢跑,防护也必须学会抢跑。
---
常见问题
PHP2Shell漏洞影响哪些PHP版本?
从2012年发布的PHP 5.4.0到8.5.11全部受影响。官方修复版本为8.5.12、8.4.27、8.3.36、8.2.35。PHP 8.1及更早版本已终止官方支持,无法通过包管理器更新,必须迁移到受支持版本。
补丁打完就安全了吗?
不一定。补丁发布前攻击已经开始,如果服务器在补丁前被入侵,攻击者可能已植入后门。打补丁后还需要做文件完整性校验、检查Web根目录是否有非授权文件、排查异常进程和计划任务。
没有用PHP的网站需要关注吗?
如果你的服务器上跑着其他PHP应用(比如WordPress、Drupal、phpMyAdmin),即使主站不是PHP,也会受影响。排查时不能只看主站技术栈,要查服务器上所有PHP进程。
WAF能拦住这个漏洞吗?
Cloudflare在补丁发布前9小时就向全量客户下发了WAF规则。自建WAF需要添加针对multipart异常表单的拦截规则,过滤无Content-Length的表单提交和空文件控件批量提交。但WAF不是终点,补丁仍然必须打。
等保三级测评会查这个吗?
会。等保2.0三级要求"及时修补应用系统安全漏洞",PHP高危漏洞属于必查项。如果测评时发现PHP版本存在已知高危漏洞且未修复,会判定为不合规。
---
*华南腾飞科技提供政企网站安全运维、漏洞应急响应与WAF防护方案部署服务,7×24小时安全值守,60分钟响应。如需PHP漏洞排查或安全评估,联系13510444731。*











