安全公告:PHP 核心高危漏洞(PHP2Shell)影响ZenDAS运行环境,请尽快升级补丁
- 2026-10-27 15:32:44
- 张玉洁 原创
- 133
2026 年 10 月 21 日,PHP 官方紧急发布安全更新,修复两个位于 PHP 解释器内核的高危漏洞(CVE-2026-109618、CVE-2026-109619,社区合称 PHP2Shell)。两个漏洞均可在未认证的情况下导致远程代码执行,CVSS v4.0 评分 9.2,为严重等级漏洞。攻击者无需登录、无需任何交互,即可在受影响的服务器上执行任意代码,也可能读取 PHP 工作进程内存中的密码、Token、密钥等敏感数据。
需要特别说明的是:本次漏洞不在ZenDAS自身代码中,而位于ZenDAS服务端所依赖的 PHP 运行时。 不同ZenDAS版本的 PHP 运行时来源不同:
- ZenDAS 3.2 及以下版本:不使用 FrankenPHP,PHP 运行时由 Zbox(Apache + PHP)或用户自己的 Web 环境提供
| 当前情况 | 处理建议 |
|---|---|
| 正在使用ZenDAS 3.2 及以下版本,且运行时尚未修复 | 按本公告第四节下载并修补适配的 PHP 运行时文件。 |
| 暂时无法替换运行时文件或完成升级 | 先实施第五节临时缓解措施,并尽快安排后续修复。 |
一、受影响的部署
- 使用未修复 PHP 运行时的ZenDAS服务端部署,包括源码包 / 手动部署和一键安装包;
- 3.2 及以下版本(以 3.2 为例:Linux Zbox 内置 PHP 7.4.30、Windows Zbox 内置 PHP 7.4.30、Windows XAMPP 集成包内置 PHP 7.0.19),以及源码包部署在未修复的系统 PHP 上;
- 受影响 PHP 版本:低于 PHP 8.2.35 的 8.2.x、低于 PHP 8.3.36 的 8.3.x、低于 PHP 8.4.12 的 8.4.x、低于 PHP 8.5.12 的 8.5.x;PHP 8.1 及更早分支已停止维护,同样受漏洞影响。
本次修复仅涉及服务端。ZenDAS浏览器不依赖 PHP 运行时,不属于本次漏洞影响范围,无需因本漏洞升级。
二、3.2 及以下版本修复方法
1. 版本与运行时现状
3.2 及以下版本PHP 运行时由安装包或用户自己的 Web 环境提供。
PHP 7.x 已停止维护,官方没有为 7.0 / 7.2 / 7.4 发布包含本次修复的正式版本。
您可根据实际情况选择以下处理方式:
Linux 一键安装包补丁
zendas-php2shell-php74zts-linux-amd64-universal-20261103-r2.tar.gz
补丁说明
该补丁不修改ZenDAS程序和数据库,而是整体替换 zbox 内的 PHP 运行时:
- 将 PHP 7.4.30 ZTS 替换为 PHP 7.4.33 ZTS;
- 在 PHP 7.4.33 源码上应用 PHP 官方针对 EOL 分支的最小缓解提交 712e60f9edfd03f0960fc4fc3c2c375f42b90aa2(Avoid state corruption via bailout,修复 CVE-2026-109618、CVE-2026-109619);
- 同步替换 Apache mod_php 模块、OPcache、ionCube Loader,以及 mbstring / zip / sqlite3 所需的兼容库,保证版本匹配。
修复后 PHP 提供 max_multipart_body_parts 指令,默认值为 -1;该指令与上游对 Zend 分配器、HashTable、VM 在 bailout 时的状态一致性修复共同构成本次修复。
重要说明:这是面向已停止维护版本的过渡修复方案,不等于 PHP 官方恢复对 7.x 的长期支持。PHP 7.4 同样已 EOL。
执行以下命令安装
# amd64 # 安装前校验补丁包。 sha256sum zendas-php2shell-php74zts-linux-amd64-universal-20261103-r2.tar.gz tar xzf zendas-php2shell-php74zts-linux-amd64-universal-20261103-r2.tar.gz cd zendas-php2shell-php74zts-linux-amd64-universal-20261103-r2 sha256sum -c SHA256SUMS # 见下方注意事项中的安装前准备。 sudo ./install.sh --check sudo ./install.sh sudo ./verify.sh
注意事项
- 如果
sha256sum xxb-php2shell-php74zts-linux-amd64-20261023.tar.gz的结果应为 7eb102bd1db0a1760145ae83303de8ced78853cd4194394e745521c0409fd5eb ,校验一致后进行后续步骤,如不一致请停止安装并重新下载。 - 如果
sha256sum -c SHA256SUMSSHA256SUMS 中任何一项显示 FAILED,说明压缩包损坏或被篡改,请重新下载,不要继续安装。 - 执行
sudo ./install.sh --check通过时输出:
[php2shell] Current PHP state: 7.4.30 ZTS false [php2shell] Compatibility check passed; no files changed [php2shell] Run 'sudo ./install.sh' to install the patch
出现以下任一提示时请停止,不要安装:
unsupported ZenDAS version: # 版本不在已验证清单内;
Unexpected baseline ...:# 目标 PHP 运行时不是本包支持的基线(可能被自行升级或替换过);
OPcache is configured:php.ini # 主动配置了OPcache;
target already contains ... with different content:# /opt/zbox/run/lib 下已有不同版本的兼容库;
unexpected baseline PHP state:# PHP 版本或线程模式不符。
- 安装前准备
在维护窗口执行,安装过程会短暂停止 zbox;
确认 /opt/zbox 有足够磁盘空间(修复包解压后约 40 MB,备份另需约 40 MB);
确认当前没有正在进行的升级、备份或大量文件上传;
不要手工只替换其中一个文件,PHP、Apache 模块、OPcache、ionCube 必须成套替换。
- 执行
sudo ./install.sh成功时输出:(请记录最后一行输出的备份目录,便于必要时的回滚)
[php2shell] Patch installed successfully [php2shell] PHP state: 7.4.33 ZTS '-1' [php2shell] Backup and rollback script: /opt/zbox/backup/php2shell-XXXXXXXXTXXXXXXZ
脚本会先备份原运行时到/opt/zbox/backup./php2shel1-<UTC时间>/,再按当前运行状态处理:
Apache正在运行:停止Apache,替换文件后重新启动Apache;
Apache未运行:只替换休眠的Apache文件,不启动Apache;
全程不停止、不重启、不修改FrankenPHP。
- 执行
sudo ./verify.sh全部通过时输出:
[verify]OK PHP state:7.4.33 ZTS -1 [verify]OK Apache process <PID>loaded /opt/zbox/run/apache/modules/libphp7.so [verify]OK http://127.0.0.1:80/zendas/returned 200 [verify]All checks passed
Windows 一键安装包补丁
补丁说明
该补丁不修改ZenDAS程序、数据库和授权文件,只替换 ZenDAS 内的 4 个 PHP 运行时文件:
- 将 PHP 7.4.30 ZTS 替换为 PHP 7.4.33-pl1 ZTS,并应用 PHP 官方针对 7.4 分支的最小缓解提交 712e60f9edfd03f0960fc4fc3c2c375f42b90aa2(Avoid state corruption via bailout,修复 CVE-2026-109618、CVE-2026-109619);
- 替换 bin\php\php7ts.dll(PHP 核心)、bin\php\php7apache2_4.dll(Apache 模块)、bin\php\php.exe、bin\phxxb-php2shell-php74zts-win64-manual-20261026-r2.zipp\php-win.exe;
- 保留现有 php.ini、ionCube、mbstring、curl、gd、ldap、sockets、OPcache 等配置和扩展。新核心与原有 7.4 ZTS 扩展的 API、线程模式和编译器一致,扩展无需重编。
升级步骤
1. 下载补丁包到Windows
2. 停止ZenDAS服务
3. 进入ZenDAS服务指定目录:<E:\ZenDAS\bin>
4. 备份bin目录下的php程序目录,比如改名叫 php_bak,按如下图步骤所示将补丁包放到bin目录下解压。
5. 重新打开zendas.exe,检查小球面板php服务是否更新,成功更新后启动服务即可。
五、临时缓解措施
如果暂时无法替换 PHP 运行时文件,可修改对应的 php.ini,将以下配置项改为指定值(没有的请追加),然后重启所有工作进程:
- 3.2 Linux Zbox:
/opt/zbox/etc/php/php.ini; - 3.2 Windows Zbox:
zbox\bin\php\php.ini; - 3.2 源码包 / 手动部署:系统
php.ini,或 PHP-FPM 池 / Apache 虚拟主机配置。
memory_limit = -1 post_max_size = 32M upload_max_filesize = 16M session.upload_progress.enabled = 0
- 不需要上传文件时,
post_max_size可设为8M;需要文件上传时保持32M,并确保upload_max_filesize小于post_max_size。 - 如有反向代理或网关,建议在代理层同时限制请求体大小、表单字段数、multipart 分片数、请求头数量和嵌套深度。
- 使用 PHP-FPM 时,建议通过
php_admin_value[memory_limit]设置;Apache mod_php 可使用php_admin_value memory_limit -1,避免被应用中的ini_set()覆盖。 - 修改后必须重启 XXD / Zbox / Apache / PHP-FPM,使所有工作进程加载新配置。
这些措施只能降低风险,不能完全消除漏洞。PHP 官方指出,只有更新到修复版本才是完整的解决方案;因此仍建议尽快替换为修复后的 PHP 运行时。