GitHub允许组织安装GitHub应用来自动化和扩展平台上的特定功能,这些应用可以访问选定的仓库和权限。但这些应用用于身份验证的私钥可能会持续有效数年,除非被手动撤销。

安全公司GitGuardian表示,如果发生泄露,这些密钥可能让攻击者获得对组织GitHub账户的管理控制权。该公司在自2019年以来收集的4802个公开泄露的密钥中,发现了474个仍然有效的GitHub应用私钥。

在测试这些密钥的有效性时,研究人员还确定了它们所提供的访问权限。GitGuardian研究员盖坦·费里在一篇博客文章中表示,“72%的受影响应用可以读取私有仓库内容,207个可以写入内容,这意味着一个泄露的密钥就能导致整个组织被劫持。”

受泄露密钥影响的GitHub应用中,包括用于管理GitHub Actions工作流访问权限的“Access Tokens for GitHub Actions”应用。该应用的私钥于2024年1月因被意外提交到仓库中而泄露,可能影响了安装该应用的300个组织,包括Civica和Sierra Nevada Corp公司。

GitGuardian发现的其他存在密钥泄露的GitHub应用还包括BuildBuddy、Crusher.dev,以及一个与美国疾病控制与预防中心相关的私有应用。

安全软件供应商ColorTokens的首席布道师阿格尼迪普塔·萨卡表示,初步的滥用行为“极其简单”,攻击者只需拥有有效的私钥和相应的应用ID即可实现。他说,为了造成最大影响,攻击者可以进一步实施连锁攻击,“向仓库中注入恶意代码,当代码被构建或部署时,就能危害下游用户或生产环境。”

萨卡还补充道,攻击者甚至可能修改CI/CD运行器配置,从而在组织的内部网络基础设施上执行任意代码。

GitGuardian表示,已经通知了所有受影响的应用所有者关于其密钥泄露的情况,并指出该公司自身的密钥扫描服务也使用了一个GitHub应用来监控仓库中的凭证泄露情况。

当一个组织安装GitHub应用时,需要决定该应用可以访问哪些仓库以及能执行哪些操作。GitGuardian发现,40个受影响的应用可以管理自托管运行器,98个可以控制工作流,44个拥有组织管理权限。

对于拥有组织管理权限的应用,萨卡表示:“攻击者可以将自己添加为所有者,锁定合法管理员,从而完全接管整个GitHub组织。”

在受影响的应用中,一个应用有303次安装,一些应用则没有任何安装记录,而59%的应用只有一次安装,这表明它们多用于私人用途。

针对这些内部使用、仅安装一次的应用,费里表示:“这些通常是内部自动化工具、CI机器人和一次性工具,即使不再使用,也很容易被遗忘。”这类应用可能会持续运行,其密钥也会一直有效,而没有人察觉。

GitGuardian还发现有156个案例中,泄露的私钥出现在与其无关的仓库中,这使得该凭证更难与其所属的GitHub应用建立关联。

费里说:“影响范围并不止于应用的所有者,它会扩展到安装了该应用的每一个组织,并通过供应链依赖关系,影响到该应用所涉及代码的每一个下游用户。”

尽管GitHub在官方文档中警告称,私钥不会自动过期,必须手动撤销或删除,但由于对其工作原理存在错误的安全假设,许多组织可能并未这样做。

私钥是在应用配置过程中生成的,用于签署一个短期有效的JSON Web令牌(JWT),GitHub会接受该令牌并发出一个安装访问令牌。安装令牌携带的是组织在安装该应用时所授予的权限。

JWT在几分钟内就会过期,而安装令牌的有效期仅为一小时,这使得利用窗口非常短暂,也给人一种密钥泄露风险有限的错觉。

然而,任何持有该私钥的人都可以生成无数个JWT,并以该GitHub应用的身份进行身份验证,只要私钥仍然有效,就能让GitHub不断生成新的安装令牌。

萨卡在评论这种短期令牌与永久密钥并存的设计时说:“这可能是有意为之的设计权衡,而非疏忽。这正是机器与机器之间身份验证的传统运作方式,可以避免意外的服务中断。”他补充说,这种“永久有效”的设计更看重操作简便性和业务连续性,而密钥轮换的安全责任则完全落在了应用所有者身上。

费里建议定期轮换或撤销私钥,因为它们的存在时间可能比创建它们的人和创建它们的原因都要长久。他说:“一个在2020年被误提交的密钥,如今仍可能有效,即便当初的失误早已被人遗忘。”

不过萨卡表示,手动撤销密钥的情况极为罕见,而且几乎总是被动进行的。他解释说:“大多数IT服务管理手册都提到了撤销密钥的必要性,但除非发生安全事件、审计或特定变更要求,否则很少真正落实。”

Q&A

Q1:GitHub应用私钥泄露会造成什么后果?

A:泄露的私钥可能让攻击者获得对组织GitHub账户的管理控制权,能够读取甚至写入私有仓库内容,严重时可导致整个组织账户被劫持。

Q2:为什么泄露多年的GitHub密钥仍然有效?

A:因为GitHub的私钥不会自动过期,必须由所有者手动撤销或删除。许多组织由于对令牌机制存在误解,认为短期令牌降低了风险,从而忽视了对私钥的定期轮换和撤销。

Q3:企业应该如何防范GitHub应用密钥泄露风险?

A:GitGuardian建议企业应定期轮换或撤销GitHub应用私钥,尤其是对不再使用的内部自动化工具和一次性应用要及时清理,避免遗忘的旧密钥被攻击者利用。

InfoWorld