
安全研究员 Sharon Brizinov 与 Truffle Security 合作,对GitHub的“oops commits”进行了全面调查,这类提交指的是通过强制推送或已删除但仍被存档的提交,他们揭露了数千条遗留的秘密信息,包括高价值的令牌和管理员级别的凭证。团队还发布了一个开源工具,帮助其他人扫描他们自己的仓库,以发现此类隐藏的秘密泄露。
GitHub会保留每一个公共提交,即使是开发者试图通过强制推送来擦除的提交,也会作为其存档中的“零提交” PushEvents。Brizinov 使用来自 GitHub Archive 的数据,扫描自 2020 年以来的所有这类提交,发现了价值大约 25,000 美元漏洞赏金的秘密信息,尤其是暴露了可能导致广泛供应链攻击的 GitHub PATs 和 AWS 凭证。
为了强化社区的力量,Truffle Security和 Brizinov 共同开发了Force Push Scanner,这是一个开源工具,可以识别并扫描 GitHub 组织或用户账户中的孤立提交。它使用 BigQuery 挖掘GH Archive数据集,并应用TruffleHog扫描来发现隐藏的秘密和漏洞。
调查结果令人震惊:在.env 和常见配置文件中发现了大量活跃的秘密信息,如 MongoDB 凭证和 API 令牌。其中有一个特别令人担忧的案例涉及具有对Istio仓库管理员权限的 GitHub 个人访问令牌,这可能导致供应链的重大影响,尽管在负责任的披露后,该令牌已被迅速撤销了。
社区反应展现出了更广泛的影响:开发者和安全专业人士指出,计划删除的提交通常仍然可以访问。一位用户评论说,“一旦提交离开你的机器,就没有一种可行的方法可以删除提交……你必须假设它被永久暴露了”,这凸显了假定删除可以实现所带来的风险。
这项研究挑战了强制推送的 Git 历史是私有的观念。任何提交的秘密信息,即使是无意中提交的,也应该被视为已泄露,并应立即撤销。Truffle Security 的 Force Push Scanner 新增了检测先前提交中持续存在的漏洞的工具,以免它们造成广泛的损害。
为了防止秘密信息泄露,开发者应该优先使用秘密管理工具和环境变量,而不是硬编码凭证。在像HashiCorp Vault、AWS Secrets Manager或Azure Key Vault这样的安全平台上存储秘密信息,确保敏感数据永远不会进入代码库,同时提供对访问的集中控制。除此之外,在多个阶段强制进行秘密信息扫描,包括本地的预提交钩子和 CI/CD 流水线,这也是至关重要的。像TruffleHog、Gitleaks或Detect Secrets这样的工具可以及早发现暴露的凭证,定期的历史扫描有助于发现隐藏在旧提交中的秘密信息。
当秘密信息暴露时,就应该将其视为已泄露。通过自动化流程或动态秘密系统立即撤销和轮换凭证,此举可以最小化风险窗口。这应该与严格的访问控制相结合,遵循最小权限原则,确保开发者和服务只访问他们真正需要的凭证。此外,启用 GitHub 的推送保护可以防止秘密信息被提交,而像 git filter-repo 这样的历史清理工具可以在政策允许的情况下谨慎使用。
除了工具和自动化之外,建立强大的安全文化至关重要。团队应该接受培训,认识到提交秘密信息的风险,并采用安全处理实践,如安全存储、定期扫描和密钥轮换。结合技术保障和文化变革,团队可以显著降低秘密暴露的风险,并将安全编码实践作为工作流程的默认组成部分。
原文链接:
Researcher Unearths Thousands of Leaked Secrets in GitHub’s “Oops Commits”
评论