GitHub 的 commit 即使通过强制推送删除,但是依然可以通过 commit hash、REST API 以及 GitHub Archive 的记录找到。作者还开源了一个工具可以批量扫描……出错后不要有侥幸,还是应该及时注销。
GitHub 的 commit 即使通过强制推送删除,但是依然可以通过 commit hash、REST API 以及 GitHub Archive 的记录找到。作者还开源了一个工具可以批量扫描……出错后不要有侥幸,还是应该及时注销。
GitHub 是本文核心讨论的代码托管平台,即使开发者执行 git reset 后 force push 删除提交,其仍会永久保留这些 dangling commits(孤立提交)。文章指出这些提交在 GH Archive 中以 zero-commit PushEvent 形式存在,且可通过完整或前四位哈希直接访问。作者利用这一特性扫描全平台历史“oops commits”,发现大量泄露密钥,并强调 GitHub 的存储机制使提交删除无法真正移除敏感信息。
Force Push Scanner 是本文作者 Sharon Brizinov 与 Truffle Security 合作开发并开源的工具,专门用于扫描指定 GitHub 组织或用户的 force push 删除提交中的密钥。它通过查询 GH Archive 的 zero-commit 事件获取 before 哈希,再用 TruffleHog 针对性扫描 dangling commits。工具旨在帮助蓝队评估暴露风险,已在实践中帮助作者发现价值约 2.5 万美元的漏洞赏金。
TruffleHog 是本文用于检测 dangling commits 中密钥的核心扫描工具,作者在自定义自动化脚本及 Force Push Scanner 中均调用它分析 before 提交。它能自动拉取 blob 内容并支持从指定提交向后扫描,弥补了仅知前四位哈希时的效率问题。文章指出该工具曾帮助作者在已删除文件中发现高价值秘密,是本次全 GitHub“oops commits”扫描的关键组件。
本文中 GitHub Event API 用于获取 GitHub 公开仓库的实时事件数据,包括 PushEvent 等活动,无需认证即可访问公共事件。它记录了 force push 操作产生的零提交 PushEvent,这些事件对应开发者尝试删除的 dangling commit。作者结合 GH Archive 历史数据,利用该 API 定位自 2020 年以来所有被 force push 覆盖的提交哈希,从而实现大规模 secrets 扫描。
本文指出 GH Archive 数据以 Google BigQuery 公共数据集形式提供,作者与 Truffle Security 合作开发的 force-push-scanner 工具直接查询该数据集,筛选零提交的 PushEvent。借助 BigQuery 可高效遍历自 2020 年以来的全部 GitHub 公开活动记录,而无需逐个下载 JSON 归档文件。该方案显著提升了对全 GitHub dangling commit 的 secrets 扫描规模与速度。
GH Archive 是记录 GitHub 所有公开事件的归档项目,本文通过其 BigQuery 数据集高效检索 2020 年以来全部 zero-commit PushEvent,从而定位 force push 删除的提交。相比逐仓库暴力破解哈希的低效方式,它提供了近实时、全历史的事件数据支持。作者以此为基础构建自动化流程,扫描并发现数千活跃密钥,最终与 Truffle Security 合作开源 Force Push Scanner。
本文围绕 Git 的 force push 机制展开,解释了执行 git reset --hard HEAD~1 后 git push --force 会移除分支引用,但 GitHub 仍保留 dangling commit。作者通过 git rev-list、git cat-file 等命令展示 commit-tree-blob 结构,并演示如何通过已知哈希或前四位十六进制访问被删除的提交。文章强调 Git 本身无法真正删除已推送的 commit,需配合 GitHub 存储特性才能定位 secrets。
Sharon Brizinov 是本文客座作者,一位专注 OT/IoT 的白帽黑客。他利用 GH Archive 扫描自 2020 年以来所有 GitHub force push 删除的提交,发现数千活跃密钥,其中 GitHub PAT 和 AWS 凭证最具价值。通过漏洞赏金程序,他获得约 2.5 万美元回报,并与 Truffle Security 合作开源 Force Push Scanner。作者此前已用类似方法从 dangling blobs 中挖掘 64k 美元秘密。
GitHub 是本文核心讨论的代码托管平台,即使开发者执行 git reset 后 force push 删除提交,其仍会永久保留这些 dangling commits(孤立提交)。文章指出这些提交在 GH Archive 中以 zero-commit PushEvent 形式存在,且可通过完整或前四位哈希直接访问。作者利用这一特性扫描全平台历史“oops commits”,发现大量泄露密钥,并强调 GitHub 的存储机制使提交删除无法真正移除敏感信息。
Truffle Security 是本文发布平台及合作方,通过 Research CFP 计划支持作者研究,并共同开发 Force Push Scanner 工具。其此前开发的 TruffleHog 也被集成用于扫描 dangling commits。文章强调该公司在 secrets scanning 领域的持续投入,包括对 GitHub 删除提交可访问性的多次发现,最终促成全 GitHub 历史“oops commits”的规模化扫描。
本文通过 secrets triage 平台统计发现,MongoDB 凭证在零提交事件中泄露数量最多,主要来自学生和初级开发者的非关键 side-project。相比之下,GitHub PAT 和 AWS 凭证虽然数量较少,但价值更高,产生了大部分 bug bounty 收入。作者据此建议重点关注 .env 等配置文件中的高价值 secrets。
本文统计显示,AWS 凭证与 GitHub PAT 同属 dangling commit 中最具价值的 secrets 类型,常产生最高额的 bug bounty。作者在人工与工具 triage 阶段优先筛选企业邮箱提交的 AWS 密钥,并通过 secrets-ninja 等工具验证其权限范围。最终这些高价值 AWS secrets 贡献了约 25k 美元的赏金收入。
文章以 Istio 为案例,披露作者在 dangling commit 中发现一个拥有全部 Istio 仓库 admin 权限的 GitHub PAT。Istio 是拥有 36k stars 的开源 service mesh,被 Google、IBM、Red Hat 等广泛使用,潜在供应链攻击影响巨大。发现后 Istio 安全团队迅速吊销该 token,避免了大规模风险。
可左右滑动查看