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

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

对开发者来讲,在 GitHub 上建立了一个项目准备运行,并不表明这个项目已经真正完成了,还有不少部署测试工做须要手动操做。segmentfault

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 自身的行为也容易受到此问题的影响。spa

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

42701605152793_.pic_hd.jpg

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

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

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 会发出警告,若是继续尝试使用旧的不安全命令,工做流执行过程将会出错。

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

segmentfault 公众号