事件概述
Truffle Security 扫描了 2.24 亿个公开 GitHub 仓库,共发现 1,103,438 条暴露凭证。2026 年 7 月底,该公司对这批凭证进行有效性验证,发现 543,699 条仍处于活跃状态。
暴露时间跨度
最旧的一条是 2009 年提交的 AWS 密钥,之后一直未被处理。整套数据的中位暴露窗口为 784 天。Truffle 表示,2,636 条活跃凭证来自最后修改时间早于 2015 年的文件,约四分之一发现结果已超过四年。
推送保护后的新增暴露
约一半凭证是在 GitHub 启用免费告警和默认推送保护之后推送到公开仓库的。Truffle 给出的分布是:245,959 条早于免费告警;97,897 条出现在扫描免费、推送保护还只是一个设置项的阶段;199,843 条在阻止成为默认后落地,并在两年多后仍能通过提供商验证。
主要凭证类型
暴露列表中占比较多的是 69,041 条 Google Cloud 服务账号凭证、51,067 条 MongoDB 连接字符串和 33,343 条有效 Google API 密钥。
为何仍活跃
GitHub 的 secret scanning 项目会把暴露令牌发送给签发方以推动撤销,但不强制合作伙伴撤销已识别秘密,这被认为是大量凭证仍有效的背景。Truffle 认为,这些凭证仍活跃不是因为暴露没有被阻止,而是因为泄露后没有被撤销,部分提供商可能缺少自动清理泄露令牌的流程。
Truffle 的观点
推送保护是有效控制,能在入口挡住秘密,但对已经在系统内的 543,699 条凭证没有作用,它本来也不是为此设计。告警可以覆盖历史,但前提是仓库所有者启用了告警、阅读了告警,并随后轮换密钥。
处置重点
对曾提交过密钥的仓库,仅依赖推送保护和告警并不足够;需要确认历史暴露、撤销或轮换凭证,并检查签发方是否真正执行了失效流程。 |