一个名为Gheist的威胁行为者正在将被入侵的GitHub账户转变为凭证窃取平台。攻击者通过在私有代码仓库中植入恶意的GitHub Actions工作流,能够泄露仓库和环境中的敏感信息,随后通过GitHub API获取这些数据,并在事后删除活动痕迹。
Wiz Research自9月15日起持续追踪该攻击活动,发现超过850个被入侵账户中已出现13500多个恶意分支,涉及个人项目和私有企业代码仓库。
该攻击活动的工具是GitHub Actions,即GitHub平台的自动化服务,攻击者利用它将窃取到的访问权限转化为已获取的敏感凭证。整个自动化流程会创建一个分支,添加一个名为"sync-check"的工作流,该工作流试图将敏感信息打印到执行日志中,随后通过GitHub API获取这些日志,并在数秒后删除工作流运行记录。
Wiz研究人员在一篇博客文章中表示:"由于这些敏感信息是通过GitHub自身的API泄露出去的,因此不存在攻击者的域名或需要拦截的外发连接。"
GitHub已经引入了一项控制机制,该机制会将公共代码仓库中可能存在恶意的工作流运行保留下来,等待协作者批准。Wiz报告称,这项措施成功阻止了Gheist在公共代码仓库中的运行。然而,该防护措施并未覆盖私有代码仓库或GitHub企业服务器,研究人员在这些环境中观察到了成功的执行及后续活动。
研究人员发现,Gheist的攻击者利用了GitHub Actions敏感信息掩码机制与工作流访问敏感数据方式之间存在的一个漏洞。
GitHub会对日志中原样出现的敏感信息值进行掩码处理。然而,Gheist创建的工作流会先将这些敏感信息用base32编码后再打印出来,这样一来它们就与原始值不匹配了。因此,这些信息会在日志中以未被掩码的形式出现。在使用部署环境(如生产环境)的代码仓库中,Gheist创建了多个工作流任务,专门针对特定环境的敏感信息进行窃取。
这不仅可能暴露存储在仓库层面的敏感信息,还可能暴露用于运行生产系统的敏感凭证。
此后,Gheist逐步演变为针对自托管的GitHub Actions运行器发起攻击。其新增的sync-host任务会尝试在运行器主机中搜索API令牌、私钥、环境文件、云凭证以及其他敏感数据。它还会尝试访问Docker套接字、云实例元数据以及Kubernetes服务账户令牌。
Wiz指出,该演变版本中存在实现方面的缺陷,因此不应认为其能够成功提取每一项目标凭证。
Wiz观察到,在恶意工作流运行数小时后,来自同一机构的云凭证被用于枚举AWS Secrets Manager(密钥管理服务)。CloudTrail记录同样显示,攻击者创建的分支上的工作流会获取AWS角色权限,这为相关活动的执行提供了证据,即便在某些情况下GitHub日志本身无法获取。
Wiz将可能的凭证来源追溯至信息窃取软件的日志记录,以及此前供应链入侵事件(包括3月份的Trivy入侵事件)中泄露的令牌。研究人员还发现,受影响的账户与其他恶意活动之间存在重叠,包括被重命名用于传播破解软件诱饵的代码仓库,以及试图滥用GitHub Actions以获取免费计算资源的行为。
安全团队被建议搜索符合"ci-sync-"格式(后跟六个随机字符)的分支、标题为"ci: sync config"的提交记录,以及那些完成后很快被删除的工作流运行记录。此外,还应调查与这些分支相关联的云角色获取行为,撤销已被入侵的令牌,并对受影响工作流可访问的每一个仓库、组织及环境中的敏感信息进行轮换更新。研究人员警告称,删除分支或运行记录并不能撤销已经发生的凭证泄露。
本文原载于CSO网站。
