5 百万款应用揭示了 JavaScript 的秘密

发布: (2026年2月17日 GMT+8 22:40)
9 分钟阅读

Source: Bleeping Computer

入侵者搜索截图

概览

泄露的 API 密钥并不新鲜,但前端代码中问题的规模一直是个谜——直到现在。
Intruder’s 研究团队构建了一种新的机密检测方法,并扫描了 5 million 应用,专门寻找隐藏在 JavaScript 包中的机密。

我们发现,这揭示了业界在保护单页应用方面的巨大缺口。

42,000 个隐藏在明处的机密

在大规模应用我们的新检测方法后,结果令人震惊。仅输出文件就超过 100 MB 的纯文本数据,包含 超过 42 000 条泄露的令牌,涉及 334 种机密类型

这些并非低价值的测试密钥或失效令牌。我们发现了嵌入生产代码中的活跃、关键凭证,实际上绕过了大多数组织依赖的安全控制。

下面是我们发现的最关键风险的分类。

代码仓库令牌

最具影响力的泄露是针对代码仓库平台(如 GitHubGitLab)的令牌。我们共找到了 688 条令牌,其中许多仍然活跃并授予完整的仓库访问权限。

示例: 在 JavaScript 文件中硬编码的 GitLab 个人访问令牌。该令牌的作用域允许访问组织内的 所有私有仓库,包括下游服务(AWS、SSH 等)的 CI/CD 流水线机密。

嵌入 JavaScript 中的 GitLab 个人访问令牌

项目管理 API 密钥

另一大泄露涉及 Linear(一款项目管理工具)的 API 密钥,直接嵌入前端代码中。

前端代码中暴露的 Linear API 密钥

该令牌可不受限制地访问组织的整个 Linear 实例——内部工单、项目以及与下游 SaaS 服务的链接。

其他泄露的机密

我们在大量其他服务中识别出了机密:

  • CAD 软件 API – 访问用户数据、项目元数据和建筑设计(包括一家医院)。
  • 邮件平台 – 访问邮件列表、营销活动和订阅者数据。
  • 聊天/自动化平台的 Webhook – 213 条 Slack、2 条 Microsoft Teams、1 条 Discord 和 98 条 Zapier webhook,全部处于激活状态。
  • PDF 转换器 – 访问第三方文档生成工具。
  • 销售情报与分析平台 – 访问抓取的公司和联系人数据。
  • 链接缩短服务 – 能够创建和枚举短链接。

要点: 将机密嵌入源代码——尤其是前端资产——会形成巨大的攻击面。定期的自动化扫描、机密管理策略以及严格的 CI/CD 卫生是防止此类泄露的关键。

Source:

为什么这些密钥会被漏掉?

传统扫描器不会“解析” JavaScript

传统的、全自动的应用密钥检测方法是:

  1. 搜索一组已知路径。
  2. 使用正则表达式匹配已知的密钥格式。

虽然有用,但这种方法显而易见地有限,无法检测所有类型的泄漏——尤其是需要扫描器爬取整个应用或进行身份验证的情况。

示例: Nuclei 的 GitLab 个人访问令牌模板

当扫描器收到一个基础 URL(例如 https://portal.intruder.io/)时,模板会:

  1. https://portal.intruder.io/ 发起 HTTP GET 请求。
  2. 仅检查直接响应,忽略其他页面和资源(例如 JavaScript 文件)。
  3. 尝试识别 GitLab 个人访问令牌的模式。
  4. 若发现令牌,向 GitLab 公共 API 发起后续请求,以检查该令牌是否处于激活状态。
  5. 若激活,则生成问题。

当模板定义了许多常见的泄漏路径时,这一流程运行良好。但这正是 基础设施扫描器 的典型特征,它们 运行无头浏览器。因此,浏览器会请求的资源——例如 JavaScript 包 https://portal.intruder.io/assets/index-DzChsIZu.js——永远不会被抓取。

“构建过程”盲点

静态应用安全测试(SAST)工具通过分析源代码来发现漏洞,是在密钥进入生产环境前检测它们的主要手段。它们擅长捕获硬编码凭证。

然而,我们发现 SAST 并 覆盖全部情况:一些嵌入在 JavaScript 包中的密钥会在静态分析无法检测的空白处漏掉。

DAST 的困境

动态应用安全测试(DAST)工具通常在扫描应用时更为强大。它们可以:

  • 爬取整个站点。
  • 支持身份验证。
  • 检测更广泛的应用层弱点。

理论上,DAST 应该是前端密钥检测的自然选择,因为它能够获取 JavaScript 文件并对其进行密钥扫描。实际上却:

  • DAST 成本高,且需要大量配置。
  • 通常只针对少数高价值应用使用。
  • 许多组织并 为整个大型数字资产的每个应用配置 DAST 扫描器。
  • 某些 DAST 工具缺少专用命令行密钥扫描器提供的完整正则表达式集合。

产生的缺口

以下因素的组合:

  • 传统基础设施扫描器不抓取 JavaScript 资产,
  • 对打包代码的 SAST 覆盖有限,
  • DAST 部署不频繁或配置不足

导致了一个明显的盲区,密钥可以在此处未被发现。必须通过一种能够高效分析 JavaScript 包且不需要全规模 DAST 成本与复杂度的解决方案来弥补这一缺口。

保持你的机密安全

Shift‑left 控制很重要。SAST、仓库扫描和 IDE 防护栏能够捕获真实问题并防止整类泄露。但正如本研究所示,它们并未覆盖机密进入生产的所有路径。

在构建和部署期间引入的机密可以绕过这些防护措施,最终出现在前端代码中——在 shift‑left 控制已经运行之后很久。这一问题将随着自动化和 AI 生成代码的普及而加剧。

这就是为什么需要对单页应用(SPA)进行爬虫扫描,以在机密进入生产之前捕获它们。我们已在 Intruder 中构建了自动化的 SPA 机密检测,帮助团队真正捕获这些泄露。

了解更多

作者

Ben Marr – Intruder 安全工程师

Ben 是 Intruder 的安全工程师,负责自动化进攻性安全扫描并进行安全研究。他的背景包括 OSWE 认证的渗透测试和 PHP 软件工程。

Intruder 赞助并撰写。

0 浏览
Back to Blog

相关文章

阅读更多 »