漏洞预警丨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 及临时执行痕迹。
五、盛邦安全产品支持情况
盛邦安全全系列产品已同步完成对该漏洞的检测与防护能力更新:
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。







评论