修复 PHP php2shell 漏洞:CVE-2026-109618 / CVE-2026-109619

PHP wes 13 hours ago (2026-10-22) 24 views
📑 本文导航

 

高危,CVSS 9.2,未授权远程代码执行 RCE,代号 php2shell 一句话重点:升级是唯一根治方案;临时缓解措施不能替代升级,所有 Web 形态(FPM /mod_php/php-cgi / FrankenPHP / Litespeed)都受影响,mod_php 风险最高腾讯云

漏洞原理

  1. CVE-2026-109618:OOM 内存耗尽时,longjmp 提前跳出上下文,请求内存未初始化完成就进入关闭流程,造成内存破坏。触发方式:特制 multipart/form-data POST(大量嵌套字段、空文件控件)耗尽 memory_limit,不突破 post_max_size 也能触发腾讯云。
  2. CVE-2026-109619:FPM worker 进程跨请求状态未正确重置,释放后重用(UAF);同一个 worker 先后处理两个恶意请求,实现内存泄露 + RCE腾讯云。

影响版本

  • PHP 8.2.x < 8.2.35
  • PHP 8.3.x < 8.3.36
  • PHP 8.4.x < 8.4.27
  • PHP 8.5.x < 8.5.12
  • 8.1 及更早全部受影响(官方已经停止维护,没有补丁)腾讯云

✅ 安全基线版本 >=8.2.35 / >=8.3.36 / >=8.4.27 / >=8.5.12

处理步骤(标准运维流程)

1)资产排查

php -v
# 检查运行模式:php-fpm / apache2-mod-php / lsphp
ps aux | grep php

重点资产:WordPress、Drupal、Joomla、Magento、各类 PHP 面板、自研 PHP 业务。

2)优先方案:升级(推荐)

  • 源码编译:重新编译对应安全版本,替换 php 二进制、php-fpm,重启服务
  • 包管理器(apt/yum):使用官方 sury/remi 源更新,不要停留在发行源旧版

升级前:备份网站代码、数据库、php.ini、pool 配置;灰度、先测试环境验证业务兼容;升级后重启 php-fpm /apache

3)临时缓解(不能根治,应急窗口期用)

官方明确:只是降低攻击面,无法 100% 封堵漏洞,仅用于来不及升级的紧急阶段腾讯云 php.ini:

session.upload_progress.enabled = 0
memory_limit 不要设置过大,合理收紧;
post_max_size、upload_max_filesize 按需收紧,不要放开超大值

WAF 防护规则:

  • 拦截异常复杂 multipart/form-data POST,大量嵌套表单字段、批量空文件上传控件请求;
  • 限制单 IP 高频 POST 上传类请求;
  • 云厂商 WAF(腾讯 EdgeOne、阿里云 WAF 等)已经上线专项规则。

注意:关闭 upload_progress 对很多业务(上传进度条)有影响,上线前评估。

4)加固与检测(升级之后)

  1. 重启服务后复核 php -v、页面 phpinfo 版本;
  2. 审计 Web 访问日志,搜索恶意 multipart POST,排查是否已经被入侵;
  3. 检查进程、webshell、定时任务、异常账号;
  4. 最小权限:php-fpm 运行用户禁止 shell、禁止写 web 根以外目录;禁用危险函数 system/exec/passthru(业务允许的前提下);
  5. 网络层面:PHP 服务尽量不直接公网暴露,前置 WAF、CDN。

老版本(PHP ≤8.1)说明

官方不再维护、没有补丁:

  • 方案 A:升级到 8.2 + 安全版
  • 方案 B:下线、替换技术栈;不建议继续对外公网提供服务

常见误区

  • ❌ 只靠 WAF 就完事:EXP 可以变形绕过 WAF 规则,WAF 是辅助,不是修复;
  • ❌ 改 post_max_size 就能修好:漏洞可以在不超限 post_max_size 的条件下触发;
  • ❌ 只有文件上传接口才会中招:不需要业务上传接口,只要 PHP 接收 POST multipart 请求就有风险,攻击发生在 PHP 内核阶段,应用代码跑之前就触发 RCEThe PHP Fo…。

应急处置顺序建议

  1. 先加 WAF 临时规则 + 关闭 upload_progress;
  2. 评估业务兼容性,准备升级包、备份;
  3. 灰度升级到安全版本;
  4. 日志溯源、入侵排查;
  5. 全部升级完成后撤掉临时应急配置(如果业务依赖 upload_progress)。


↑