对开发者来说,在 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 通报此漏洞
据了解,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 -