JavaScript代码包中的敏感信息泄露问题依然严重

发布于:2026-01-22 点击量:55 来源:至顶网

泄露的API密钥已不再罕见,随之而来的数据泄露事件也屡见不鲜。但为什么敏感令牌仍然如此容易暴露?

为了找出答案,Intruder研究团队调查了传统漏洞扫描器的实际覆盖范围,并构建了一种新的秘密检测方法来解决现有方法中的缺陷。

通过大规模扫描500万个应用程序,发现了超过42,000个暴露的令牌,涵盖334种秘密类型,揭示了现有工具未能很好处理的一类主要泄露秘密,特别是在单页应用程序中。

本文将分解现有的秘密检测方法,并揭示我们在扫描数百万应用程序中隐藏在JavaScript代码包中的秘密时发现的问题。

传统基础设施扫描器的局限性

检测应用程序秘密的传统全自动方法是搜索一组已知路径并应用正则表达式来匹配已知的秘密格式。

虽然这种方法有用且可以捕获一些暴露,但它有明显的局限性,无法检测所有类型的泄露,特别是那些需要扫描器爬取应用程序或进行身份验证的泄露。

一个很好的例子是Nuclei的GitLab个人访问令牌模板。扫描器被提供一个基础URL,例如https://portal.intruder.io/,导致模板执行以下操作:

向https://portal.intruder.io/发出HTTP GET请求

检查对该单个请求的直接响应,忽略其他页面和资源,如JavaScript文件

尝试识别GitLab个人访问令牌的模式

如果找到,向GitLab的公共API发出后续请求以检查令牌是否处于活动状态

如果处于活动状态,则提出问题

这显然是一个简单的例子,但这种方法是有效的。特别是当模板定义许多通常暴露秘密的路径时。

这种格式是基础设施扫描器的典型格式,通常不运行无头浏览器。当扫描器被给定要扫描的基础URL时,浏览器会发出的后续请求(如渲染页面所需的JavaScript文件)不会使用这种传统方法。

动态应用程序安全测试的挑战

动态应用程序安全测试工具通常是扫描应用程序的更强大方式,往往具有更复杂的功能,允许完整的应用程序爬取、支持身份验证,以及检测应用程序层弱点的更广泛能力。确实,DAST扫描器可能看起来是在应用程序前端进行秘密检测的自然选择。

然而,这种类型的扫描更昂贵,需要深入配置,实际上通常仅保留给少数高价值应用程序。此外,许多DAST工具与知名命令行工具相比,没有实现足够广泛的正则表达式范围。

这留下了一个明显的缺口,应该由传统基础设施扫描器覆盖,但实际上没有 - 很可能由于部署、预算和维护限制,DAST扫描器也没有覆盖。

静态应用程序安全测试的盲点

静态应用程序安全测试工具分析源代码以识别漏洞,是在代码到达生产环境之前检测秘密的主要方式。它们在捕获硬编码凭据和防止某些类别的暴露方面很有效。

然而,我们发现SAST方法也没有覆盖全貌 - 再次,JavaScript代码包中的一些秘密以静态分析会遗漏的方式漏过了缺口。

当我们开始这项研究时,还不清楚这个问题有多普遍。秘密实际上是否被打包到JavaScript前端中,是否普遍到足以证明自动化方法的合理性?

为了找出答案,我们构建了一个自动检查并扫描了大约500万个应用程序。结果是大量的暴露,远超我们的预期。仅输出文件就超过100MB的纯文本,包含超过42,000个令牌,涵盖334种不同的秘密类型。

我们没有完全分类每个结果,但在我们审查的样本中,我们识别出了许多高影响的暴露。

发现的重要泄露案例

代码仓库平台令牌暴露

我们识别出的最有影响力的暴露是代码仓库平台(如GitHub和GitLab)的令牌。总共,我们发现了688个令牌,其中许多仍然活跃并提供对仓库的完全访问权限。

在一个案例中,GitLab个人访问令牌直接嵌入在JavaScript文件中。该令牌的作用域允许访问组织内的所有私有仓库,包括AWS和SSH等后续服务的CI/CD管道秘密。

项目管理平台API密钥

另一个重要的暴露涉及Linear(一个项目管理应用程序)的API密钥,直接嵌入在前端代码中。

该令牌暴露了组织的整个Linear实例,包括内部工单、项目以及与下游服务和SaaS项目的链接。

其他服务的秘密暴露

我们识别出了各种其他服务的暴露秘密,包括:

CAD软件API - 访问用户数据、项目元数据和建筑设计,包括医院

链接缩短器 - 创建和枚举链接的能力

电子邮件平台 - 访问邮件列表、营销活动和订阅者数据

聊天和自动化平台的Webhooks - 213个Slack、2个Microsoft Teams、1个Discord和98个Zapier,全部处于活动状态

PDF转换器 - 访问第三方文档生成工具

销售智能和分析平台 - 访问抓取的公司和联系人数据

左移控制很重要。SAST、仓库扫描和IDE防护措施能够捕获真正的问题并防止整个类别的暴露。但正如这项研究所显示的,它们并不覆盖秘密进入生产环境的每条路径。

在构建和部署过程中引入的秘密可以绕过这些保护措施,最终出现在前端代码中,远在左移控制已经运行之后。随着自动化和AI生成代码变得更加普遍,这个问题只会增长。

这就是为什么需要单页应用程序爬取来在秘密到达生产环境之前捕获它们。我们已经将自动化SPA秘密检测构建到Intruder中,以便团队能够真正捕获这些问题。

Q&A

Q1:为什么JavaScript代码包中的秘密信息容易被忽略?

A:传统的漏洞扫描器主要检查已知路径并使用正则表达式匹配,但不会像浏览器那样请求JavaScript文件。DAST工具虽然更强大,但成本高且配置复杂,通常只用于少数高价值应用。SAST工具主要分析源代码,但会遗漏构建和部署过程中引入的秘密。

Q2:Intruder研究团队发现了多少暴露的敏感令牌?

A:通过扫描大约500万个应用程序,研究团队发现了超过42,000个暴露的令牌,涵盖334种不同的秘密类型。其中包括688个代码仓库平台令牌,以及各种其他服务的API密钥,如聊天平台、电子邮件平台和项目管理工具等。

Q3:哪些类型的敏感信息暴露影响最大?

A:最有影响力的是代码仓库平台如GitHub和GitLab的令牌,许多仍然活跃并提供对私有仓库的完全访问权限。还有项目管理平台API密钥暴露整个组织实例,以及各种第三方服务的秘密,包括CAD软件API、聊天平台webhooks、电子邮件平台访问权限等。


【版权声明】:本站内容来自于与互联网(注明原创稿件除外),如文章或图像侵犯到您的权益,请及时告知,我们第一时间删除处理!