PHPUnit 发布安全更新,修复一个高危漏洞(CVE-2026-41570):攻击者可以通过不可见换行符注入(invisible newline injection)向 PHPUnit 转发给子进程的 PHP INI 设置中注入恶意指令,在 CI/CD 管道中实现远程代码执行。

PHPUnit 是 PHP 生态事实上的单元测试标准,几乎所有 PHP 项目的 CI/CD 管道都以它运行测试。该漏洞的机制在于 PHPUnit 处理 INI 配置的方式:当测试进程将 INI 指令转发给子进程时,攻击者若能控制测试配置文件中的某些输入(例如通过被入侵的依赖或恶意 pull request 中包含的测试配置),可以利用不可见换行字符注入额外的 INI 指令。

通过注入类似 auto_prepend_file 的指令,攻击者可以让子进程在执行测试之前加载攻击者控制的 PHP 文件,从而在 CI 构建环境——一个通常持有部署凭据、云访问令牌和代码仓库写权限的高价值环境——中执行任意代码。

攻击场景主要针对 CI/CD 管道:

  • 攻击者向开源项目提交包含恶意测试配置的 pull request
  • 项目维护者合并后,CI 系统运行 PHPUnit,恶意配置生效
  • 构建环境中存储的机密(API 密钥、部署凭据、代码签名证书)被窃取

受影响版本覆盖 PHPUnit 11 和 12 的多个发布线,修复版本为 12.5.22 和 13.1.6。运行 PHP 项目的团队应立即更新 CI 环境中的 PHPUnit 版本,并审查近期合并的测试配置变更中是否存在可疑的 INI 设置。

这一漏洞再次凸显了 CI/CD 管道作为供应链攻击目标的吸引力:测试框架通常被赋予广泛的文件系统和网络访问权限,却很少受到与生产代码同等级别的安全审查。

本文编译自 Security Online,原文地址:https://securityonline.info/high-severity-phpunit-vulnerability-enables-remote-code-execution-via-invisible-newline-injection/