Gh Actions - Context Script Injections

支持 HackTricks

基本信息

请注意,有某些 github 上下文 的值是由创建 PR 的 用户 控制 的。如果 github action 使用该 数据执行任何操作,可能会导致 任意代码执行。这些上下文通常以 bodydefault_branchemailhead_reflabelmessagenamepage_namereftitle 结尾。例如(来自此 写作 的列表):

  • github.event.comment.body

  • github.event.issue.body

  • github.event.issue.title

  • github.head_ref

  • github.pull_request.*

  • github.*.*.authors.name

  • github.*.*.authors.email

请注意,这里有 不太明显的潜在不可信输入来源,例如分支名称和电子邮件地址,这些内容在 允许的内容方面相当灵活。例如,zzz";echo${IFS}"hello";# 将是一个有效的分支名称,并可能成为目标仓库的攻击向量。

脚本注入攻击示例

脚本注入攻击可以直接发生在工作流的内联脚本中。在以下示例中,一个 action 使用 表达式来测试拉取请求标题的有效性,但也增加了脚本注入的风险:

- name: Check PR title
run: |
title="${{ github.event.pull_request.title }}"
if [[ $title =~ ^octocat ]]; then
echo "PR title starts with 'octocat'"
exit 0
else
echo "PR title did not start with 'octocat'"
exit 1
fi

在运行 shell 脚本之前,${{ }} 内的表达式会被 评估,然后用结果值替换,这可能使其 容易受到 shell 命令注入

为了将命令注入到此工作流中,攻击者可以创建一个标题为 a"; ls $GITHUB_WORKSPACE" 的拉取请求。

在这个例子中," 字符用于中断 title="${{ github.event.pull_request.title }}" 语句,从而允许在运行器上执行 ls 命令。

Last updated