gpt4 book ai didi

security - 如何安全地允许 Github Actions 检查 PR 并在评论中发布结果

转载 作者:行者123 更新时间:2023-12-05 04:43:50 25 4
gpt4 key购买 nike

我正在尝试了解 Github Actions (GHA) 中的安全模型。假设我对公共(public) repo 有以下要求:

  1. 允许打开 fork repo 的拉取请求
  2. GHA 应该对拉取请求运行单元测试
  3. GHA 应将单元测试结果作为 PR 评论发布

为了使第三个要求起作用,拉取请求需要访问具有 repo 写入权限的 GITHUB_TOKEN。这将需要以下两个权限:

  • 从分支拉取请求运行工作流。
  • 从分支拉取请求向工作流发送写入 token

First, Run workflows from fork pull requests.  Second, Send write tokens to workflows from fork pull requests

现在,如果写 token 被发送到 fork PR 中的工作流,如何防止黑客更改 PR 中的工作流并将其用于任意数量的恶意目的(在原始 repo 中创建恶意版本或泄露 repo secret ) )?我知道你可以 limit the permissions of the token ,但这是在工作流程中完成的;黑客可以像 PR 的一部分一样轻松地删除限制。

有没有办法在没有这个安全漏洞的情况下完成这三个要求?

最佳答案

这道题必读的是:Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests

GH Action提供事件类型“pull_request_target”,具有写权限,可以评论PR。 请勿在不小心的情况下使用它!PR 的代码不受信任 - 如果您构建它,它可能会注入(inject)恶意代码并危及您的存储库并可能窃取您的 secret 。

为此建议的解决方案是:

  1. 有一个由“pull_request”事件触发的工作流。这使用只读 GITHUB_TOKEN 运行。您可以在这里运行单元测试。在此工作流结束时,单元测试结果作为构建工件上传。

  2. 有另一个工作流,由事件“workflow_run”触发。它在 PR 工作流完成时运行。第二个工作流在具有写访问权限 GITHUB_TOKEN 和所有其他配置的 secret 的基础存储库的上下文中运行。它可以从第一次工作流运行中下载工件,并使用此构建结果为 PR 创建评论。

重要提示:来自第一次工作流运行的传入工件数据仍必须被视为不受信任。但是:

When used in a safe manner, like reading PR numbers or reading a code coverage text to comment on the PR, it is safe to use such untrusted data in the privileged workflow context.

参见 https://securitylab.github.com/research/github-actions-preventing-pwn-requests/一个完整的使用示例。

注意:您关于“Fork pull request workflows”配置的屏幕截图已同时重命名为“Fork pull request workflows in private repositories”: configuration for forked workflows in private repos使用私有(private)存储库,您可以控制与谁共享您的代码。所以你可能决定默认信任。但是有了公共(public)存储库,任何人都可以 fork 该存储库。

更新:github actions 博文系列的所有链接:

关于security - 如何安全地允许 Github Actions 检查 PR 并在评论中发布结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69499645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com