GitHub Actions 被曝存在严重安全漏洞,Google Project Zero 披露详情

GitHub Actions 被曝存在严重安全漏洞,Google Project Zero 披露详情





对开发者来说,在 GitHub 上创建了一个项目准备运行,并不代表这个项目已经真正完成了,还有很多部署测试工作需要手动操作。


GitHub 的 Action 功能可以简化这一步,对项目的代码进行自动化的测试,现在已经有很多人使用它来持续集成/连续部署(CI/CD),但最近 Actions 中被发现隐藏了一个安全漏洞。


Google Project Zero 的研究人员发现,GitHub Action 的一个设计缺陷可以使***能够写入开发者的存储库,甚至可以显示加密的机密文件。




GitHub Actions 中存在严重安全漏洞


Google Project Zero 研究员 Felix Wilhelm 发现,GitHub Actions 工作流命令功能充当 Action Runner 和执行的动作之间的通信渠道。这意味着工作流命令通过解析所有已执行操作的 STDOUT 来工作,STDOUT 携带的那些命令之一是“set-env”。


Set-env 可以将任意环境变量定义为工作流的一部分,极易受到注入***。当运行程序解析每个 STDOUT 行以查找工作流命令时,每个“在执行过程中打印不受信任的内容的 Github Action 都将受到***”。


Felix Wilhelm 研究了一些受欢迎的 Github 存储库,他发现几乎所有具有某些复杂 GitHub Actions 的项目都可能受到***,即使 Github 自身的行为也容易受到此问题的影响。




Google Project Zero 早已向 GitHub 通报此漏洞


GitHub Actions 被曝存在严重安全漏洞,Google Project Zero 披露详情


据了解,Google Project Zero 在为 GitHub 提供的 90 天修复期的基础上还将这个时间延长了 14 天,在 GitHub 再次提出延长宽限期后,Google Project Zero 拒绝了这个请求,并披露了漏洞的详细情况。


Google Project Zero 是谷歌于 2014 年宣布的互联网安全项目,整个团队由谷歌内部顶尖的安全工程师组成,发现、跟踪和修复尚未被公开的软件安全漏洞。


Google Project Zero 所处理的安全漏洞通常都属于“零日漏洞”,此类安全漏洞通常都尚未被公开,用户不能在第一时间对其进行修复。为了阻止***利用零日漏洞发起***,谷歌推出了 Project Zero 计划。


据了解,Google Project Zero 发现漏洞后会首先与受影响的机构联系,给出 90 天的修复期,漏洞修复完成后才会公开相关信息。今年 7 月,Project Zero 团队已向 GitHub 发出了漏洞警告。




GitHub Action 中隐藏着更多麻烦


Felix Wilhelm 坦言,隐藏在GitHub Action工作流命令中可能会遇到更多麻烦,他承认他没有考虑其他工作区命令的安全影响。


Felix Wilhelm 认为,“实现工作流命令的方式根本上是不安全的。废除 v1命令语法并使用 allowlist 加强 set-env 可能不利于直接的 RCE [远程代码执行]向量。然而,即使能够覆盖后面步骤使用的‘正常’环境变量,也可能足以利用最复杂的操作。”


当然,也有一劳永逸解决这个问题的方法。Felix Wilhelm 建议将工作流命令移动到某个不受约束的通道(例如一个新的文件描述符),以避免解析 STDOUT。但这样做也存在一个小问题,它会破坏许多现有的代码操作。


GitHub 的开发人员正在从 Runner 中删除两个最易受***的命令。未来 Runner 将发布一个更新,该更新将会禁用 set-env 和 add-path 工作流命令。


同时,GitHub 建议开发者“应该升级到 @actions/core v1.2.6 或更高版本,并用新的 Environment File Syntax 替换工作流中的 set-env 或 add-path 命令的任何实例。”


如果继续使用旧命令或旧工具包版本的工作流和操作,那么 GitHub 会发出警告,如果继续尝试使用旧的不安全命令,工作流执行过程将会出错。


就像安全问题经常发生的那样,是时候开始修补和清理代码了。开发人员的安全工作永远不会完成…...




- END -

GitHub Actions 被曝存在严重安全漏洞,Google Project Zero 披露详情


上一篇:MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题


下一篇:Leetcode 1702. 修改后的最大二进制字符串(DAY 127) ---- 贪心算法学习期(+2补)