10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

研究发现,GitHub 的“oops commits”中包含了数千条已泄露的秘密信息

作者:Craig Risi

  • 2025-09-15
    北京
  • 本文字数:1304 字

    阅读完需:约 4 分钟

大小:639.71K时长:03:38
研究发现,GitHub的“oops commits”中包含了数千条已泄露的秘密信息

安全研究员 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 VaultAWS Secrets ManagerAzure Key Vault这样的安全平台上存储秘密信息,确保敏感数据永远不会进入代码库,同时提供对访问的集中控制。除此之外,在多个阶段强制进行秘密信息扫描,包括本地的预提交钩子和 CI/CD 流水线,这也是至关重要的。像TruffleHogGitleaksDetect Secrets这样的工具可以及早发现暴露的凭证,定期的历史扫描有助于发现隐藏在旧提交中的秘密信息。

 

当秘密信息暴露时,就应该将其视为已泄露。通过自动化流程或动态秘密系统立即撤销和轮换凭证,此举可以最小化风险窗口。这应该与严格的访问控制相结合,遵循最小权限原则,确保开发者和服务只访问他们真正需要的凭证。此外,启用 GitHub 的推送保护可以防止秘密信息被提交,而像 git filter-repo 这样的历史清理工具可以在政策允许的情况下谨慎使用。

 

除了工具和自动化之外,建立强大的安全文化至关重要。团队应该接受培训,认识到提交秘密信息的风险,并采用安全处理实践,如安全存储、定期扫描和密钥轮换。结合技术保障和文化变革,团队可以显著降低秘密暴露的风险,并将安全编码实践作为工作流程的默认组成部分。

 

原文链接:

 Researcher Unearths Thousands of Leaked Secrets in GitHub’s “Oops Commits”

2025-09-15 15:001

评论

发布
暂无评论

Flutter开发小技巧【Flutter专题23】

坚果

flutter 28天写作 12月日更

面试官:HashSet如何保证元素不重复?

王磊

dart系列之:手写Library,Library编写最佳实践

程序那些事

flutter dart 程序那些事 12月日更

元宇宙100讲-0x007

hackstoic

元宇宙

【架构实战营】模块七

衣谷

架构实战营

花一点时间优化一次年迈的后台系统的检索体验

为自己带盐

28天写作 12月日更 ​jQuery

Python 自动化领域起点篇,Selenium WebDriver 学习第1篇

梦想橡皮擦

12月日更

20《重学JAVA》--集合(二)

杨鹏Geek

Java25周年 28天写作 12月日更

Kvrocks 在 RocksDB 上的优化实践

Kvrocks

Redis 协议

XEngine:深度学习模型推理优化

华为云开发者联盟

深度学习 模型推理 显存优化 计算优化 XEngine

50 K8S之Contour控制器

穿过生命散发芬芳

k8s 28天写作 12月日更

DDD领域驱动设计实战(三)-深入理解实体

JavaEdge

12月日更

Istio的认证授权机制分析

xcbeyond

istio 认证授权 28天写作 12月日更

什么是VLAN?如何配置?VLAN间路由又是怎样的?一文了解!

Ethereal

VLAN 网络技术

解决:Command ‘mongo‘ not found, but can be installed with

liuzhen007

28天写作 12月日更

【CSS 学习总结】目录 - CSS 知识点梳理

Brave

CSS 12月日更

[Pulsar] Consumer消费

Zike Yang

Apache Pulsar 12月日更

synchronized源码分析之锁的膨胀

Ayue、

synchronized 锁机制 锁升级

React进阶(十一):create-react-app脚手架关闭 eslint 提醒

No Silver Bullet

React 12月日更 creat-react-app

语音信号处理 4:语音信号在时域和频域的表示

轻口味

28天写作 12月日更

React进阶(十二):HOOK

No Silver Bullet

React Hooks 12月日更

元宇宙地产:品牌和投资者的大好机会?

devpoint

以太坊 NFT 元宇宙 12月日更

念叨了一年的游戏叙事书中文版终于出了!

博文视点Broadview

怎么活的超脱:把自己的生活看成一场戏

mtfelix

28天写作

如何实现Redis限流

喵叔

28天写作 12月日更

开始了解DevSecOps 1

搬砖的周狮傅

DevSecOps

NGINX从入门到实践-基础篇

小志Codings

nginx Python3

【LeetCode】一年中的第几天Java题解

Albert

算法 LeetCode 12月日更

如何用Docker Compose部署项目?

秦怀杂货店

Docker springboot

Android EventBus 集成问题小结

阿策小和尚

28天写作 Android 小菜鸟 12月日更

【架构实战营】模块八

衣谷

架构实战营

研究发现,GitHub的“oops commits”中包含了数千条已泄露的秘密信息_后端_InfoQ精选文章