
API密钥泄露事件已屡见不鲜,随之而来的数据泄露也司空见惯。但为何敏感凭证仍如此轻易地暴露在外?为探究根源,Intruder研究团队分析了传统漏洞扫描工具的覆盖范围,并开发了新的凭证检测方法以弥补现有方案的不足。
通过对500万款应用的大规模扫描,研究人员发现了334类共计42,000余个暴露凭证,这暴露出现有工具(特别是针对单页应用SPA)在处理某类凭证泄露时存在重大缺陷。本文将剖析现有凭证检测方法,并揭示我们对数百万应用中JavaScript打包文件隐藏凭证的扫描发现。
现有凭证检测方法及其局限性
传统凭证检测
传统自动化凭证检测通过检索已知路径并应用正则表达式匹配已知凭证格式。虽然该方法能发现部分泄露,但其明显局限在于无法检测所有泄露类型,特别是需要爬取应用或身份验证的场景。
以Nuclei的GitLab个人访问令牌模板为例,扫描器接收基础URL(如https://portal.intruder.io/)后会执行以下流程:
- 向目标URL发起HTTP GET请求
- 仅检查该请求的直接响应(忽略JavaScript文件等其他页面资源)
- 尝试识别GitLab个人访问令牌模式
- 若发现疑似凭证,则向GitLab公共API发起验证请求
- 确认有效后标记为问题
这种典型的基础设施扫描方案通常不运行无头浏览器,当给定基础URL时,浏览器后续加载的JavaScript文件(如https://portal.intruder.io/assets/index-DzChsIZu.js)不会被传统方法检索。
动态应用安全测试(DAST)
DAST工具具备更强大的扫描能力,支持完整爬取、身份验证及更全面的应用层弱点检测。理论上DAST应能完美检测前端凭证,但实际上这类扫描成本高昂且需深度配置,通常仅用于少数高价值应用。此外,多数DAST工具的正则表达式覆盖范围不及知名命令行工具。
静态应用安全测试(SAST)
SAST工具通过分析源代码识别漏洞,是预防生产环境凭证泄露的主要手段。但其同样存在检测盲区——静态分析会遗漏JavaScript打包文件中的部分凭证。
JavaScript打包文件凭证检测方案构建
为评估该问题的普遍性,我们构建自动化检测方案扫描约500万款应用。结果远超预期:纯文本输出文件超过100MB,涵盖334类42,000余个凭证。抽样分析显示存在多个高影响案例。
主要发现
代码仓库令牌
最具破坏性的是GitHub/GitLab等代码仓库平台的688个令牌,其中多数仍有效且具有仓库完全访问权限。典型案例显示,某GitLab个人访问令牌直接嵌入JavaScript文件,该令牌可访问组织内所有私有仓库,包括AWS和SSH等下游服务的CI/CD流水线凭证。

项目管理API密钥
某项目管理工具Linear的API密钥直接暴露在前端代码中:
该密钥可访问整个Linear实例,包括内部工单、项目及下游服务和SaaS项目链接。
其他高危暴露
我们还发现包括以下服务的凭证泄露:
- CAD软件API:可访问医院等机构的用户数据、项目元数据和建筑设计
- 短链接服务:可创建和枚举链接
- 邮件平台:可操作邮件列表、营销活动和订阅者数据
- 聊天自动化平台Webhook:213个Slack、2个Microsoft Teams、1个Discord和98个Zapier有效凭证
- PDF转换器:可访问第三方文档生成工具
- 销售情报分析平台:可获取爬取的公司和联系人数据
防范建议
左移安全控制(SAST、仓库扫描和IDE防护)确实能预防大量泄露,但本研究证明它们无法覆盖凭证进入生产环境的所有路径。构建部署阶段引入的凭证可能绕过这些防护,最终出现在前端代码中。随着自动化技术和AI生成代码的普及,该问题将愈发严重。
因此需要单页应用爬取技术在生产环境前拦截凭证。我们已在Intruder中集成自动化SPA凭证检测功能,帮助团队有效防范此类风险。
参考来源:
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)

