jsc*_*ter 3 security github github-actions
我正在尝试了解 Github Actions (GHA) 中的安全模型。假设我对公共仓库有以下要求:
为了使第三个要求起作用,拉取请求需要访问具有存储库写入权限的 GITHUB_TOKEN。这将需要以下两个权限:
现在,如果将写入令牌发送到分叉 PR 中的工作流程,那么如何防止黑客更改 PR 中的工作流程并将其用于任意数量的恶意目的(在原始存储库中创建恶意版本或窃取存储库机密)?我知道您可以限制令牌的权限,但这是在工作流程内完成的;黑客可以像 PR 的一部分一样轻松地消除限制。
有没有什么方法可以在不存在安全漏洞的情况下完成这三个要求?
此问题的必读内容是:保持 GitHub 操作和工作流程的安全第 1 部分:防止 pwn 请求
GH Action 提供了事件类型“ pull_request_target ”,具有写权限,可以评论 PR。不小心就不要使用这个!PR 的代码不受信任 - 如果您构建它,它可能会注入恶意代码并危害您的存储库,并可能窃取您的秘密。
建议的解决方案是:
有一个由“ pull_request ”事件触发的工作流程。它使用只读 GITHUB_TOKEN 运行。在这里您可以运行单元测试。在此工作流程结束时,单元测试结果将作为构建工件上传。
有另一个工作流程,由事件“ workflow_run ”触发。它在 PR 工作流程完成时运行。第二个工作流程在具有写入访问权限 GITHUB_TOKEN 和所有其他配置的机密的基础存储库的上下文中运行。它可以从第一次工作流程运行中下载工件,并使用此构建结果来创建对 PR 的评论。
重要提示:来自第一次工作流运行的传入工件数据仍必须被视为不可信。但:
当以安全的方式使用时,例如读取 PR 编号或读取代码覆盖文本来评论 PR,在特权工作流上下文中使用此类不受信任的数据是安全的。
有关完整的使用示例,请参阅https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ 。
注意:有关“Fork pull request 工作流程”配置的屏幕截图同时已重命名为“Fork pull request 工作流程在私有存储库中”:
通过私有存储库,您可以控制与谁共享代码。因此,您可能会决定默认信任。但通过公共存储库,任何人都可以分叉该存储库。
更新:github actions 博客文章系列的所有链接:
归档时间: |
|
查看次数: |
1559 次 |
最近记录: |