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";#
将是一个有效的分支名称,并可能成为目标仓库的攻击向量。
脚本注入攻击示例
脚本注入攻击可以直接发生在工作流的内联脚本中。在以下示例中,一个 action 使用 表达式来测试拉取请求标题的有效性,但也增加了脚本注入的风险:
在运行 shell 脚本之前,${{ }}
内的表达式会被 评估,然后用结果值替换,这可能使其 容易受到 shell 命令注入。
为了将命令注入到此工作流中,攻击者可以创建一个标题为 a"; ls $GITHUB_WORKSPACE"
的拉取请求。
在这个例子中,"
字符用于中断 title=
"${{ github.event.pull_request.title }}"
语句,从而允许在运行器上执行 ls
命令。
Last updated