安全公告:PHP 核心高危漏洞(PHP2Shell)影响禅道运行环境,请尽快升级补丁!

原创


尊敬的禅道用户:

2026 年 10 月 21 日,PHP 官方紧急发布安全更新,修复两个位于 PHP 解释器内核的高危漏洞(CVE-2026-109618、CVE-2026-109619,社区合称 PHP2Shell,CVSS v4.0 评分 9.2,等级为严重)。攻击者无需登录、无需任何交互,即可在受影响的服务器上执行任意代码;即使不取得代码执行权限,也可读取 PHP 工作进程内存中的密码、Token、密钥等敏感数据。


因软件都是私有部署的版本,我们无法一一发消息提醒,特此以公告形式告知大家。


需要特别说明的是:本次漏洞不在禅道自身代码中,而位于禅道所依赖的 PHP 运行时。因此必须完成 PHP 运行时的修复。由于 PHP 官方提供补丁的最低版本为 7.4,禅道也只能提供 7.4 和 8.1 的补丁。7.4 以下的用户需要尽快升级到 7.4 或更高版本。


为了保障您的系统安全,防止潜在的安全风险,我们强烈建议您尽快下载并安装最新的补丁。以下是补丁下载链接及临时解决方案。


二、云服务用户:已更新完毕,无需任何操作

使用禅道云服务的用户无需进行操作,云服务环境当前已运行修复后的版本,可以放心继续使用。


三、使用Windows一键安装包的用户如何处理

在禅道服务器上找到禅道安装目录,右键查看 ZenTao\bin\php\php.exe 属性中的详细信息,获取 PHP 版本号。

如果 PHP 版本低于 7.2,需要更换一键安装包,更换 22.6 系列一键安装包后无需再安装补丁。操作文档: https://www.zentao.net/book/zentaopms/2478.html

如果 PHP 版本是 7.2、7.4 或 8.1,请按照以下步骤安装安全补丁。

  1. 下载已经修复的 PHP 程序压缩包:
  2. 找到本地禅道集成运行环境的目录,例如 D:\ZenTao。
  3. 进入 ZenTao 目录下的 bin 子目录。备份其中的 php 目录,例如改名为 php_bak;将 php.zip 或 php8.1.zip 放到 bin 目录下解压,得到新的 PHP 程序目录。
  4. 在一键安装包面板停止禅道服务,然后退出面板(右键右下角禅道图标并退出程序),再重新启动服务。
  5. 访问禅道页面,检查是否报错。
禅道 Windows 一键安装包目录
备份并替换 php 目录
启动禅道一键安装包服务


四、使用Linux一键安装包的用户如何处理

请先在服务器上执行 /opt/zbox/bin/php -v 查看 PHP 版本,再选择与 PHP 系列和服务器架构匹配的补丁包。

如果 PHP 版本低于 7.4,需要更换一键安装包,更换 22.6 系列一键安装包后无需再安装补丁。操作文档: https://www.zentao.net/book/zentaopms/2478.html

PHP 7.4 版

amd64 架构

cd /tmp
wget https://dl.zentao.net/patches/zbox-php74-php2shell-patch-20261022-linux-amd64.tar.gz
tar -xzf zbox-php74-php2shell-patch-20261022-linux-amd64.tar.gz
cd zbox-php74-php2shell-patch-20261022-linux-amd64
sudo ./install.sh

arm64 架构

cd /tmp
wget https://dl.zentao.net/patches/zbox-php74-php2shell-patch-20261022-linux-arm64.tar.gz
tar -xzf zbox-php74-php2shell-patch-20261022-linux-arm64.tar.gz
cd zbox-php74-php2shell-patch-20261022-linux-arm64
sudo ./install.sh

PHP 8.1 版

amd64 架构

cd /tmp
wget https://dl.zentao.net/patches/zbox-php81-php2shell-patch-20261023-linux-amd64.tar.gz
tar -xzf zbox-php81-php2shell-patch-20261023-linux-amd64.tar.gz
cd zbox-php81-php2shell-patch-20261023-linux-amd64
sudo ./install.sh

arm64 架构

cd /tmp
wget https://dl.zentao.net/patches/zbox-php81-php2shell-patch-20261023-linux-arm64.tar.gz
tar -xzf zbox-php81-php2shell-patch-20261023-linux-arm64.tar.gz
cd zbox-php81-php2shell-patch-20261023-linux-arm64
sudo ./install.sh
注意事项
  • 补丁适用于 PHP 7.4.0 ~ 7.4.33 或 PHP 8.1.0 ~ 8.1.31 的 Linux amd64 / arm64 一键安装包。
  • 安装期间 ZBox 会短暂停止,请安排维护窗口并提前通知用户。
  • 如果安装前 ZBox 正在运行,脚本会先停止服务;更新完成后会自动启动并检查 Apache 是否加载新的 PHP 模块。
  • 如果安装前 ZBox 没有运行,脚本只更新文件,不会主动启动服务。
  • 安装器会备份原文件并生成回滚脚本,路径为 /opt/zbox/backup/php2shell-<时间>/rollback.sh。安装或启动失败时会自动恢复;如问题持续,可使用生成的脚本回滚并联系技术支持。


五、使用禅道官方Docker镜像的用户如何处理

1. Docker 单容器运行环境

# 1.本地镜像备份
docker tag <原镜像:tag> <原镜像:tag>-bak

# 2.拉取新版镜像
docker pull <原镜像:tag>

# 3.停删旧容器(卷数据保留)
docker stop <容器名>
docker rm <容器名>

# 4.启动
docker run 【原有启动参数】 <原镜像:tag>

2. Docker  Compose 运行环境

# 1.本地镜像备份
docker tag <原镜像:tag> <原镜像:tag>-bak

# 2.拉取修复后新版镜像
docker pull <原镜像:tag>

# 3.优雅停止服务
docker-compose down

# 4.重新启动服务(自动加载新镜像,保留全部原有配置、数据)
docker-compose up -d

3. K8S/K3S 运行环境

# 1.先查询,确认禅道deployment名称
kubectl get deploy -n <namespace>

# 2.登录集群节点,备份本地缓存的旧镜像
docker tag <原镜像:tag> <原镜像:tag>-bak

# 3.设置 imagePullPolicy: Always,新建Pod强制拉取仓库最新镜像
kubectl patch deployment <zentao-deploy> -n <namespace> \
-p '{"spec":{"template":{"spec":{"containers":[{"name":"zentao","imagePullPolicy":"Always"}]}}}}'

# 4.触发滚动更新
kubectl rollout restart deployment <zentao-deploy> -n <namespace>

# 5.观察Pod就绪状态
kubectl get pods -n <namespace>

# 6. 更新稳定后,恢复默认拉取策略 IfNotPresent(可选)
kubectl patch deployment <zentao-deploy> -n <namespace> \
-p '{"spec":{"template":{"spec":{"containers":[{"name":"zentao","imagePullPolicy":"IfNotPresent"}]}}}}'


六、使用操作系统自带包管理器安装的用户如何处理

对于直接使用操作系统包管理器搭建的 PHP 环境,很多操作系统的软件包已经更新了修复漏洞后的 PHP 版本,可以尝试更新 PHP 版本完成修复。


七、使用第三方集成环境的用户如何处理

对于使用第三方集成环境(例如宝塔面板)搭建的 PHP 环境,可以联系对应集成环境的客服,获取修复漏洞后的 PHP 版本。


八、自己编译环境的用户如何处理

对于自行编译的 PHP 环境,需要下载修复漏洞后的 PHP 代码并重新编译。

如果无法自行修复,建议安装禅道的一键安装包。禅道 18.13、21.7.9、22.6 及对应收费版本的一键安装包都已经修复该 PHP 漏洞。


九、不能升级 PHP 版本或者不能打安全补丁的用户如何处理

可以通过以下配置降低风险:

  1. 将 PHP 内存限制设置为无限制。 建议通过应用程序无法覆盖的方式设置,例如 FPM 池或 Apache 配置中的 php_admin_value。

    PHP-FPM 配置方法

    • 找到 Pool 配置文件,通常位于 /etc/php-fpm.d/www.conf(CentOS / RHEL)或 /etc/php/8.x/fpm/pool.d/www.conf(Ubuntu / Debian)。
    • 添加或修改配置行:
      php_admin_value[memory_limit] = -1
    • 重启 PHP-FPM 服务:
      # CentOS / RHEL
      systemctl restart php-fpm
      
      # Ubuntu / Debian(版本号可能不同)
      systemctl restart php8.1-fpm

    Apache 配置方法

    • 修改 Apache 虚拟主机配置:
      <VirtualHost *:80>
          ServerName example.com
          DocumentRoot /var/www/html
      
          # 设置该站点的 PHP 内存无限制
          php_admin_value memory_limit -1
      </VirtualHost>
    • 重启 Apache 服务:
      # CentOS / RHEL
      systemctl restart httpd
      
      # Ubuntu / Debian
      systemctl restart apache2
  2. 设置较小的 post_max_size。 不需要上传文件的应用可以设置为 post_max_size = 8M;需要上传文件时建议设置为 post_max_size = 32M。确保 upload_max_filesize 始终低于 post_max_size。

    建议同步检查 php.ini、zentaopms/www/.htaccess 和 zentaopms/www/.ztaccess。

  3. 修改 php.ini,在文件末尾添加:
    session.upload_progress.enabled = Off
    session.upload_progress.cleanup = On
    session.use_strict_mode = 1
    session.use_only_cookies = 1
    session.cookie_httponly = 1

重启 Web 服务器后,创建内容为 <?php phpinfo(); ?> 的 phpinfo 文件,通过浏览器查看并确认上述配置是否生效。

phpinfo 配置检查


十、写在最后:安全问题,请大家务必重视

此次PHP2Shell漏洞并非孤立事件,近期安全领域还披露了多起重大风险:

  • Oracle Java SE 紧急漏洞:10月21日紧急发布,CVSS 9.1。攻击者无需身份验证即可破坏TLS连接机密性与完整性;根源是eMudhra CA私钥强度不足,可伪造合法HTTPS证书实施中间人攻击,需单独升级JDK修复。
  • GitLab 未授权远程代码执行漏洞:CVSS 评分满分 10,影响 2012 年以来的全部自管版本。
  • Node.js 十月安全更新:一次性修复 10 个安全缺陷,其中解压缩组件的缺陷可导致远程代码执行,影响大量网站后台。
  • LiteLLM 供应链投毒:PyPI官方源出现带后门与凭据窃取器的恶意版本,绕过多重安全防护后才被发现。
  • Railway 云平台安全事件:攻击者可能读取客户环境变量与密钥,官方要求所有用户立即轮换全部凭据。
  • 日本 VPS 服务商 Onamae Desktop Cloud 被入侵:最多约 2.6 万台客户服务器被植入恶意软件。

从编程语言运行时、开发框架、开源供应链到云平台,整条软件链条上的任何一环都可能出问题,而最终都会落到每一个具体部署的系统上。因此,我们再次提醒大家:

  • 及时更新运行时环境与依赖组件,避免使用已停止维护的版本。
  • 养成定期备份习惯,升级前务必备份,确保可快速回滚。
  • 密切关注安全公告,高危漏洞披露后尽快完成环境核查与修复。
  • 强化服务器访问控制与日志监控,提升异常行为发现能力。

我们会持续跟进各部署方式的修复进展,请大家关注禅道官方渠道。如有任何问题,欢迎随时联系我们的技术支持团队。希望每一位用户都能引起重视,共同守住安全的底线。


类目
文章分类
产品动态