研究发现12,000个“有效”API密钥和密码存在于...

作者:API传播员 · 2025-11-13 · 阅读时间:5分钟
研究发现通过扫描Common Crawl公共数据集,发现约12,000个硬编码的API密钥和密码,其中11,908个为实时秘密,分布在276万个网页中,63%的密钥被重复使用。这揭示了LLM在不安全代码训练下可能生成不安全输出的风险,并强调了改进数据过滤和开发者安全实践的重要性。

研究发现12,000个“有效”API密钥和密码存在于公共数据集中

我们通过扫描Common Crawl这一庞大的公共数据集,发现了约12,000个硬编码的API密钥和密码。这一发现揭示了一个日益严重的问题:在不安全代码上训练的大型语言模型(LLM)可能会无意中生成不安全的输出。


主要发现

  • 11908个实时秘密:在400TB的网络数据中,使用TruffleLog检测到这些密钥和密码(“实时”密钥指的是成功通过身份验证的密钥)。
  • 276万个网页:这些网页包含实时秘密。
  • 高重复使用率:63%的秘密在多个网页上重复使用。例如,一个WalkScore API密钥在1871个子域中出现了57029次。

方法概述

Common Crawl简介

Common Crawl是一个包含400TB压缩网络数据的庞大数据集,其内容来自3830万个注册域名和4750万台主机。数据以WARC(Web ARCive)文件格式存储,每个WARC文件包含多个记录,记录了客户端请求、服务器响应及相关元数据。

以下是WARC记录的一个示例:

数据处理与扫描

为了处理如此庞大的数据集,我们使用了20台高性能服务器(每台16核CPU和32GB内存),构建了一个分布式作业队列。每个节点的处理步骤如下:

  1. 下载一个4GB的Common Crawl文件。
  2. 使用awk解压缩并拆分WARC记录。
  3. 对提取的内容运行TruffleLog进行扫描。

优化与挑战

WARC流媒体效率问题

我们尝试构建自定义的WARC文件处理程序,但发现直接流式处理WARC文件效率较低。最终,我们选择通过awk分割文件后再扫描,显著提高了处理速度。

仅报告“活着”的秘密

在研究中,我们仅统计了通过自动验证过程确认有效的API密钥和密码。这些“活着”的秘密能够成功通过各自服务的身份验证,而未验证的类似字符串则未被纳入统计范围。

需要注意的是,LLM在训练过程中无法区分有效和无效的秘密,这可能导致不安全的编码实践被强化。


研究影响与下一步

我们的研究表明,LLM在Common Crawl数据集中暴露了数百万个包含硬编码秘密的代码示例。这些暴露可能会影响LLM的输出安全性,尤其是在模型训练时未能有效过滤这些数据的情况下。

为了减少风险,我们建议:

  1. 扩展秘密扫描范围,涵盖公共网页和存档数据集(如Common Crawl和Archive.org)。
  2. 采用改进的保障措施(如宪法AI技术),以降低无意中复制或暴露敏感信息的可能性。

关于披露的说明

Common Crawl的数据集是公共互联网的快照,记录了开发者将密钥硬编码到前端HTML和JavaScript中的情况。需要明确的是,这并非Common Crawl的责任,而是开发者未能妥善管理敏感信息所致。

作为一项政策,当Truffle Security发现泄露的秘密时,我们会尽力帮助受影响的组织撤销密钥。在此次研究中,我们选择与用户受影响最大的供应商合作,成功撤销了数千个密钥。


额外收获:值得注意的暴露

前端代码中的AWS根密钥

我们发现一个AWS根密钥被硬编码在前端HTML中,虽然S3基本身份验证未生效,但这一暴露本不应存在。

Mailchimp API密钥的硬编码

我们还发现了近1500个独特的Mailchimp API密钥被硬编码在HTML表单和JavaScript代码中,而非使用服务器端环境变量。这种做法可能导致攻击者利用这些密钥进行钓鱼、数据泄露或品牌冒充。

重复使用的密钥

一些软件开发公司在多个客户站点上重复使用相同的API密钥,这使得攻击者可以轻松识别客户列表,进一步增加了安全风险。


总结

本次研究揭示了公共数据集中硬编码秘密的严重性,并强调了改进LLM训练数据过滤和开发者安全实践的重要性。未来,我们希望通过技术改进和行业合作,进一步降低敏感信息泄露的风险。

原文链接: https://trufflesecurity.com/blog/research-finds-12-000-live-api-keys-and-passwords-in-deepseek-s-training-data