Gh Actions - Context Script Injections
基本信息
请注意,有一些github上下文的值是由创建PR的用户 控制的。如果github action使用该数据执行任何操作,它可能导致任意代码执行。这些上下文通常以body
、default_branch
、email
、head_ref
、label
、message
、name
、page_name
、ref
和title
结尾。例如(列表来自这个写作):
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";#
将是一个有效的分支名称,并且可能成为针对目标仓库的潜在攻击向量。
脚本注入攻击示例
脚本注入攻击可以直接在工作流的内联脚本中发生。在以下示例中,一个动作使用表达式来测试拉取请求标题的有效性,但也增加了脚本注入的风险:
在运行 shell 脚本之前,${{ }}
内的表达式会被评估并替换为结果值,这可能导致容易受到 shell 命令注入攻击。
为了向这个工作流注入命令,攻击者可以创建一个标题为 a"; ls $GITHUB_WORKSPACE"
的拉取请求。
在这个例子中,"
字符用于中断 title=
"${{ github.event.pull_request.title }}"
语句,允许在运行器上执行 ls
命令。
Last updated