在广泛使用的 GitHub Action “tj-actions/branch-names” 中发现了一个关键的命令注入漏洞,影响了超过 5,000 个公共仓库。该漏洞被分配为 CVE-2025-54416,CVSS 得分为 9.1,允许在下游工作流中执行任意命令,从而使大量自动化流水线面临风险。
“branch-names” GitHub Action 是一个工作流工具,用于在 CI/CD 操作过程中检索分支和标签名称。它通常用于根据更改的文件或上下文信息触发测试、代码检查或部署工作流。然而,由于其广泛的使用,成为了攻击者的目标。
漏洞的根本原因是 Action 代码中错误地使用了 Shell 命令。尽管最初使用了 printf "%q"
来转义输入,但开发者后来使用 eval printf "%s"
解除了转义,从而重新引入了他们试图防止的命令注入风险。
通过使用 eval
,任何精心构造的分支名称或标签都可以在 CI 工作流中触发命令执行。
在顾问报告中演示了该漏洞。攻击者可以简单地创建一个分支名称:
一旦使用该分支打开一个拉取请求,漏洞的 Action 就会执行其中的嵌入式有效载荷。这展示了攻击者如何在 GitHub 托管的运行器上执行远程脚本,从而可能窃取机密或修改源代码。
根据仓库的配置,攻击者利用此漏洞可能会:
-
外泄敏感仓库机密
-
获得未经授权的写入访问权限
-
将恶意代码注入发布或部署流水线
-
破坏 CI/CD 流水线的完整性
顾问报告解释道:“影响的严重性取决于 GITHUB_TOKEN 的权限以及触发事件的上下文。”
这在自动触发特权工作流的环境中尤其令人担忧。
为了解决这个问题,该 Action 现在已经完全移除了 eval
的使用。取而代之的是使用安全的、直接的 printf
调用来写入输出,这样就不会允许命令注入:
这样既保持了 Shell 安全性,又能实现相同的功能。
使用 tj-actions/branch-names 工作流的开发者应立即将工作流更新到最新的 v9 版本。
发表评论
您还未登录,请先登录。
登录