Gh Actions - Context Script Injections

从零到英雄学习AWS黑客攻击 htARTE (HackTricks AWS Red Team Expert)

支持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";# 将是一个有效的分支名称,并且可能成为针对目标仓库的潜在攻击向量。

脚本注入攻击示例

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

- 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 命令。

从零开始学习 AWS 黑客技术,成为 htARTE (HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

Last updated