漏洞预警丨PHPsession.upload_progress远程代码执行漏洞(CVE-2026-109618/CVE-2026-109619)"

admin 2026-10-24 15:06:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

漏洞预警丨PHP session.upload\_progress 远程代码执行漏洞(CVE-2026-109618 / CVE-2026-109619)

盛邦安全WebRAY

2026年10月22日 12:26
北京

去阅读

一、漏洞概述

近日,互联网上披露了 PHP 核心引擎的两个高危漏洞(CVE-2026-109618 / CVE-2026-109619,社区追踪名称 php2shell)。漏洞细节于 2026 年 10 月 20 日在正式协调披露前提前泄露,利用代码已公开。两个漏洞均在无需任何认证的前提下实现远程代码执行,攻击者仅需向目标站点发送一个构造的 multipart POST 请求即可在 Web 服务器上执行任意系统命令。

PHP(PHP: Hypertext Preprocessor)是一种被广泛使用的开源通用脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中使用。根据 W3Techs 统计,PHP 驱动着全球约 78% 的网站,WordPress(约 43% 市场份额)、Joomla、Drupal、Laravel、Magento 等主流应用均构建于 PHP 之上。

据描述,漏洞根因位于 PHP 会话上传进度机制(session.upload\_progress,RFC1867,默认开启)及 Zend 引擎核心,共涉及多个底层缺陷:

① rfc1867 回调函数 php\_session\_rfc1867\_callback 将裸 zval \ 指针(post\_bytes\_processed、current\_file\_bytes\_processed)缓存在动态 HashTable 中,进度更新时 zend\_hash\_update经 zval\_ptr\_dtor 销毁旧数据树后指针悬空,形成堆 UAF*,攻击者通过 multipart 字段堆喷占用释放的内存块,伪造 zend\_fcall\_info / zend\_internal\_function 结构,最终劫持 zend\_call\_function() 调用 system() 执行任意命令;

② MULTIPART\_EVENT\_FORMDATA 处理器从 POST body 接受 PHPSESSID 且不校验 use\_only\_cookies(会话固定),同时上传文件名未经任何过滤直接写入会话文件(任意代码/序列化对象注入),配合 LFI 或反序列化差异即可触发 RCE;

③ OOM 触发 longjmp() 后 Zend 引擎全局状态失效、FPM worker 跨请求残留 PS(serializer) 状态,导致 var\_destroy 重入 UAF 等内存破坏。安全研究人员 watchTowr 已成功复现,Wiz 已在 WordPress、Joomla、Drupal、Magento、Laravel 官方容器镜像上验证免认证 RCE。

通用前提(所有攻击链):

  • PHP 版本 5.4.0 – 8.5.11(未升级至修复版本);
  • session.upload\_progress.enabled = On(默认开启)——链 A/C/E 及堆 UAF 向量必需;

  • 目标存在可接收 multipart POST 的 PHP 端点——rfc1867 回调在 SAPI 层触发,早于应用代码执行,因此无需认证、无需应用自身存在漏洞;

  • 全部攻击链均为未认证(pre-auth)远程利用。

分链前提条件:

公开 POC 补充前提:

(堆 UAF):需获知目标二进制符号偏移(zend\_call\_function = zval\_ptr\_dtor - 0x43EF0,需信息泄露或目标为可指纹识别的发行版预编译包);利用时序可控(请求停顿 > session.upload\_progress.min\_freq 默认 1 秒);会话 ID 需通过 php\_session\_valid\_key() 字符校验;

· 链 A:目标开启 session.upload\_progress.cleanup = On(默认)时,利用 stalled writer 技巧绕过——body 前缀 5120 字节到达 FILE\_START 后保持连接不关闭,在进度条目存续窗口(约 0.05 秒)内触发 LFI。

风险结论:实际利用门槛最低的是链 D(零条件,仅需 mod\_php)与链 A(仅需一个 LFI 点,利用复杂度低、可靠性 100%)。EOL 版本(PHP ≤ 8.1,无官方补丁)叠加默认配置的资产暴露面最大。

漏洞影响的产品和版本:

官方修复 Commit:php/php-src 3584a98(Zend 引擎 + 扩展共约 300 个文件)。

二、漏洞复现情况

盛邦安全烽火台实验室已完成对PHP 远程代码执行漏洞(CVE-2026-109618、CVE-2026-109619)的复现,截图如下:

三、漏洞影响范围

据盛邦安全daydaymap 全球资产测绘平台的数据显示,互联网上至少存在2.7亿个php相关应用资产:

其风险资产分布情况如下:

全球分布:

国内分布:

四、临时解决方案

1、立即升级(根治措施)

  • PHP 8.5 → 8.5.12;PHP 8.4 → 8.4.27;PHP 8.3 → 8.3.36;PHP 8.2 → 8.2.35 及以上;
  • 使用发行版包管理器(apt/yum)升级时确认已包含本次紧急安全更新(官方补丁于 2026-10-21 14:00 UTC 发布);自编译环境可应用源码补丁 session-upload-progress-counters.patch(将计数器由裸 zval \* 指针改为 zend\_long 原生值并引入 php\_session\_rfc1867\_sync\_counters() 安全同步);

  • 注意:关闭 upload\\_progress 不能修复 Zend 引擎 OOM/UAF(链 B/D/E),升级补丁是唯一完整修复。

2、临时缓解(无法立即升级时)

php.ini —— 立即关闭攻击主向量
 session.upload\_progress.enabled = Off
 session.use\_only\_cookies = On
 session.use\_strict\_mode = On
 各目录统一序列化处理器,防止错配(链 C)
 session.serialize\_handler = php\_serialize

PHP-FPM 池配置(/etc/php/\*/fpm/pool.d/www.conf):php\_admin\_flag[session.upload\_progress.enabled] = off,修改后 systemctl reload php-fpm。

FrankenPHP 在 Caddyfile 全局块加 frankenphp { php\_ini session.upload\_progress.enabled 0 }。

3、WAF / 反向代理拦截

  • 最快规则:拦截 multipart POST body 中的 PHP\_SESSION\_UPLOAD\_PROGRESS 字段(合法业务几乎不使用,覆盖两个 CVE 的主攻击向量)。ModSecurity:

SecRequestBodyAccess On
 SecRule ARGS\_NAMES \"@streq PHP\_SESSION\_UPLOAD\_PROGRESS\" \  \"id:1026109618,phase:2,t:none,deny,status:403,log,\
  msg:'php2shell: PHP\_SESSION\_UPLOAD\_PROGRESS field blocked (CVE-2026-109618/109619)'\"

  • 不接受上传业务的目录/虚拟主机可直接拒绝 multipart POST/PUT/PATCH(Apache mod\_rewrite、Lighttpd url.access-deny 规则见参考仓库);不要仅按 PHPSESSID Cookie 拦截,会破坏正常会话;

  • 可用检测规则:Suricata/Snort(13 条)、Sigma(5 条)、ModSecurity(7 条)、OpenResty Lua 模块(见 php2shell-poc/detection/)。

4、EOL 版本处置

PHP 8.1 及以下(5.x/7.x/8.0/8.1)无官方补丁:接入付费长期支持(ELS)或发行版回移植补丁(如 Anton-Barinov/php2shell-patches 提供 5.6/7.4/8.0/8.1 侧载式补丁构建);否则限制公网暴露(VPN/ACL 收口)、强制上述 INI 缓解并重点监控。

5、检测与应急响应

  • 排查:php -v 确认版本;php -r 'echo ini\_get(\"session.upload\_progress.enabled\");' 确认配置;grep -r \"PHP\_SESSION\_UPLOAD\_PROGRESS\" /var/log/nginx/access.log 排查历史利用痕迹;

  • 监控 PHP worker(php-fpm/php-cgi/httpd/apache2)异常子进程:/bin/sh、bash、python、perl、curl、wget、nc、certutil.exe、/dev/tcp/、fsockopen 及 whoami/id/uname 等侦察命令(无 EDR 环境可用 Florian Roth process-watcher 观察模式);

  • 发现可疑子进程或落地文件:隔离主机,保留 Web/PHP 日志,检查 Web 根目录与 /tmp、/var/tmp 中的 webshell 及临时执行痕迹。

五、盛邦安全产品支持情况

盛邦安全全系列产品已同步完成对该漏洞的检测与防护能力更新:

    漏洞预警丨PHPsession.upload_progress远程代码执行漏洞(CVE-2026-109618/CVE-2026-109619)" 网络安全文章

    漏洞预警丨PHPsession.upload_progress远程代码执行漏洞(CVE-2026-109618/CVE-2026-109619)"

    PHP核心引擎存在两个高危漏洞CVE-2026-109618与CVE-2026-109619,统称php2shell,可未认证远程代码执行,影响全球约78%网站。攻击者仅需发送构造的multipartPOST请求即可执行任意命令。建议立即升级至修复版本,或临时关闭session.upload\\_progress.enabled并配置WAF拦截规则,同时排查历史利用痕迹。
    关于对PHP2Shell漏洞开展修复的风险提示" 网络安全文章

    关于对PHP2Shell漏洞开展修复的风险提示"

    php官方于2026年10月21日修复两个高危远程代码执行漏洞(CNVD-2026-41674、CNVD-2026-41675),影响主流CMS及框架,未认证攻击者可构造恶意请求触发内存错误,导致拒绝服务、数据窃取或远程代码执行。漏洞细节与POC已公开,CNVD建议用户及时升级至最新版本。
    CNNVD|关于PHP资源管理错误漏洞的通报" 网络安全文章

    CNNVD|关于PHP资源管理错误漏洞的通报"

    CNNVD通报PHP存在资源管理错误漏洞,涉及CNNVD-2026-75300632等编号,源于内存处理错误及全局状态未正确重置,攻击者可构造恶意HTTP请求实现内存泄露并远程执行代码。影响PHP8.2.35之前等多个版本,官方已发布修复版本,建议用户及时确认版本并更新。
    PHPCVE-2026-109618深度分析" 网络安全文章

    PHPCVE-2026-109618深度分析"

    本文深度分析PHPCVE-2026-109618漏洞,涉及Zend引擎在内存耗尽应急模式下的清理机制缺陷。通过longjmp非局部跳转跳过关键清理步骤,导致EG等全局状态不一致,进而在shutdown阶段可被利用造成内存破坏,最终可能实现远程代码执行。文章还探讨了通过构造特定header链表放大内存破坏的方法,并指出Apachemod\\_php与FPM等不同SAPI下的差异化影响。
    评论:0   参与:  0