内容提要
2026年10月21日,PHP披露两个可导致远程代码执行的高危漏洞。Azure DevOps服务端不使用PHP处理客户请求,但流水线、容器及应用中的PHP需自行修补:微软托管代理的预装PHP由微软更新;自托管代理、作业容器及部署应用中的PHP需用户通过包管理器或重建镜像更新,升级代理不会替换PHP。更新后需重启PHP进程并核验实际版本。
延伸解读
托管代理与自托管代理的修补责任差异
微软托管代理上预装的 PHP 由微软负责更新,但更新按镜像分批推送,不同镜像的可用时间可能不同。若所选镜像尚未更新而工作负载急需修复,可临时在 setup 步骤安装厂商修复的 PHP 包,或改用已修补的作业容器。自托管代理则完全由用户维护,升级 Azure Pipelines 代理只更新作业运行器软件,不会替换主机或作业容器中单独安装的 PHP,需通过操作系统包管理器或 PHP 厂商支持流程更新。
容器与部署应用需重建镜像而非更新主机
作业容器和已部署应用有各自的运行时依赖,更新主机包不会更新镜像或应用包内捆绑的 PHP。对于容器化 PHP,应重建镜像并更新流水线以使用新镜像;对于部署应用,需通过主机或镜像所有者更新其 PHP 运行时,并按厂商指导重启工作进程。此外,扩展任务在代理上执行,集成可能使用外部服务,相关运行时依赖应向发布者或运营方确认。
版本核验不能只看 php -v
文章强调,比较完整包修订版和来源与厂商公告,而非仅依赖 php -v 输出。例如 Ubuntu USN-8948-1 列出 Ubuntu 24.04 的修复修订版为 8.3.6-0ubuntu0.24.04.13,Ubuntu 26.04 为 8.5.4-0ubuntu1.5;仅凭上游基础版本号无法判断补丁状态。更新后还需按厂商指导重启 PHP 服务进程,并在部署后核验实际运行版本。
Q&A
PHP2Shell 漏洞影响 Azure DevOps 服务本身吗?
不影响。Azure DevOps Services 和 Azure DevOps Server 都不使用 PHP 处理客户请求,因此服务本身不受这两个漏洞影响。但流水线、容器和部署应用中使用的 PHP 运行时需要自行修补。
微软托管的 Azure Pipelines 代理上的 PHP 由谁负责更新?
由微软负责。微软会对其托管 VM 镜像中预装的 PHP 应用安全更新,更新按镜像逐步推出,不同镜像的可用时间可能不同。如果所选镜像尚未更新而你需要修复,可临时在 setup 步骤中安装供应商修复的 PHP 包,或使用已修补的作业容器。
自托管代理上升级 Azure Pipelines 代理会顺便更新 PHP 吗?
不会。代理升级只更新作业运行器软件,不会替换主机上单独安装的 PHP 包或作业容器中的 PHP。你需要通过操作系统包管理器或 PHP 供应商支持的方式自行更新主机上的 PHP;对于容器化 PHP,需重建镜像并更新流水线使用新镜像。
如何确认 PHP 是否已修复到安全版本?
不能仅靠 php -v 判断。应检查完整的包修订版本和来源,并与供应商公告对比。例如 Ubuntu USN-8948-1 列出了 Ubuntu 24.04 的修复版本 8.3.6-0ubuntu0.24.04.13 和 Ubuntu 26.04 的 8.5.4-0ubuntu1.5,仅看上游基础版本号无法确定补丁状态。
PHP2Shell 两个漏洞的利用条件是什么?
CVE-2026-109618 涉及内存不足故障后的无效请求状态;CVE-2026-109619 涉及同一持久 worker 中后续请求消费了过期的请求状态。两者利用条件不同,仅安装 PHP CLI 或 Composer 本身并不构成可利用的 HTTP 路径证据。
修复 PHP2Shell 漏洞应升级到哪些 PHP 版本?
上游稳定版修复版本为 PHP 8.5.12、8.4.27、8.3.36 和 8.2.35。供应商确认的适用向后移植版本也有效。更新后需按供应商指导重启 PHP 服务进程,并在部署后核验实际运行版本。