对开发者来讲,在 GitHub 上建立了一个项目准备运行,并不表明这个项目已经真正完成了,还有不少部署测试工做须要手动操做。segmentfault
GitHub 的 Action 功能能够简化这一步,对项目的代码进行自动化的测试,如今已经有不少人使用它来持续集成/连续部署(CI/CD),但最近 Actions 中被发现隐藏了一个安全漏洞。安全
Google Project Zero 的研究人员发现,GitHub Action 的一个设计缺陷可使黑客可以写入开发者的存储库,甚至能够显示加密的机密文件。工具
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 提供的 90 天修复期的基础上还将这个时间延长了 14 天,在 GitHub 再次提出延长宽限期后,Google Project Zero 拒绝了这个请求,并披露了漏洞的详细状况。设计
Google Project Zero 是谷歌于 2014 年宣布的互联网安全项目,整个团队由谷歌内部顶尖的安全工程师组成,发现、跟踪和修复还没有被公开的软件安全漏洞。blog
Google Project Zero 所处理的安全漏洞一般都属于“零日漏洞”,此类安全漏洞一般都还没有被公开,用户不能在第一时间对其进行修复。为了阻止黑客利用零日漏洞发起攻击,谷歌推出了 Project Zero 计划。开发
据了解,Google Project Zero 发现漏洞后会首先与受影响的机构联系,给出 90 天的修复期,漏洞修复完成后才会公开相关信息。今年 7 月,Project Zero 团队已向 GitHub 发出了漏洞警告。部署
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 会发出警告,若是继续尝试使用旧的不安全命令,工做流执行过程将会出错。
就像安全问题常常发生的那样,是时候开始修补和清理代码了。开发人员的安全工做永远不会完成…...