如果你把 AWS 密钥不小心贴到了 GitHub 仓库里,可以用 git filter-branch 强制覆盖历史记录,然后轮换密钥。但如果你把密钥贴进了某个聊天机器人,而这段对话后来被抓取、编入训练语料、发布为公开数据集、又被打包进十几款衍生数据集——那么撤销就无从谈起了。
Truffle Security 8 月 1 日发布的研究给出了一组令人不安的数字:该团队扫描了 HuggingFace 上所有公开数据集——7.6 PB、1.87 亿个文件、约 81.5 万个数据集仓库——在其中 6,003 个数据集中发现了 221,303 个仍可验证的活跃凭证。44% 的凭证出现在多个数据集中,单个 Infura 密钥甚至被复制到了 1,131 个不同数据集。
这是已知最大规模的 AI 训练数据凭证扫描。研究团队通过向凭证提供方实际验证了每条密钥是否仍然有效,并使用元数据查询评估了其影响范围——未读取任何数据库行、文件内容或修改任何对象。
供应链令牌:可推送代码、发布镜像、接管组织
最危险的发现不是数量最多的,而是能够直接改写软件供应链的凭证。
扫描发现了 349 个活跃的 GitHub Personal Access Token:其中 223 个拥有完整 repo 写入权限,130 个可以重写 CI 工作流,112 个具有 admin:org 权限,110 个可以发布 packages。此外还有 318 个可推送镜像的 Docker Hub Token。
一个拥有 repo 写入权限的 Token 属于某 MCP(Model Context Protocol)注册中心创始人的账户——该账户关联到官方 MCP 组织,旗下仓库的 SDK 被主流 AI 编程工具使用,总计超过 17.8 万 GitHub Star。其他高危凭证包括某大型科技公司工程师的高权限 Token、一家银行开发者的 Token,以及一位 AI 实验室研究员的 Token。Truffle Security 已负责任地通知了相关方,但未公开具体身份。
这些 Token 构成了经典的软件供应链攻击向量:攻击者只需推入恶意代码,下游所有用户都会在下次安装或更新时受到影响。与常规代码仓库不同,训练数据集通常不会被当作需要安全审计的软件制品,但它们同样承载着能接触生产系统的凭证。
云计算与数据库:被遗忘的基础设施
在云端层面,扫描发现了 8,557 个活跃的 GCP 服务账号密钥(分布在 3,811 个项目中),其中一个持有显式的 Owner 角色,还有一个是 Kubernetes cluster-admin。项目元数据表明部分密钥关联到医疗和支付应用。
AWS 侧的情况同样严峻:3,343 个密钥通过了 STS 身份校验,其中 907 个可以列出 S3 存储桶。通过存储桶级元数据验证,至少 51.7 TB 的数据位于配置了禁止公开访问的存储桶中,桶名包含 prod、backup、customer、billing、terraform 等标识。最大单个账号的存储桶容量达 66.9 TB。
数据库凭证方面,扫描发现 8,594 个仍可认证的数据库登录凭据。按照元数据统计,暴露的数据库容量下限为 3.5 TB。其中 MongoDB 集群 6,802 个中 6,121 个仍然可以连接,最大单个 MongoDB 集群的元数据报告容量为 617.7 GB。尾部风险集中在少数大型实例——94 个集群超过 1 GB——包括一个与美国国防承包商关联的 SQL Server 和一组与巴西联邦机构相关的 PostgreSQL 实例。
泄漏放大器:一条密钥,1,131 个副本
这些凭证如何进入训练数据?Truffle Security 的追踪揭示了一个机械性的放大过程。
绝大多数密钥并非由数据集作者直接泄露,而是在更上游被公开——GitHub 仓库、网页、聊天记录——随后被 Common Crawl 或 The Stack 等大规模语料采集系统抓取。一旦进入上游语料,这些密钥就会随每次去重、过滤和微调重混进入所有衍生数据集。The Stack 及其分支携带了 51,571 条独立活跃密钥,Allen AI 的 Dolma 系列则携带了 28,110 条。
聊天机器人成为一个新的泄漏路径。一条属于巴西某借贷金融科技公司的 AWS 密钥之所以进入训练数据,是因为开发者在某聊天机器人中粘贴了含有该密钥的 boto3 代码。这段对话被 LMSYS-Chat-1M 数据集捕获,随后被镜像约 18 次。
44% 的活跃凭证出现在不止一个数据集中;19,380 条出现在 10 个或更多数据集中。一旦密钥成为训练数据,它就获得了 Git 历史所不具备的"永生"——数据集没有 force-push。已被下载到数千台机器的副本、已被混入的衍生数据集、以及可能已被模型权重记忆的信息,都无法回滚。
自泄漏:当发布者暴露了自己的钥匙
Truffle Security 区分了两种泄漏模式。在可追溯的 763 个 HuggingFace Token(237 个具有写入权限,70 个具有 org-admin)中,约 700 个是从陌生人处抓取进入的,而 63 个属于自泄漏——由凭证所有者自己放入了他们维护的数据集中。
案例包括:一家 AI 基础设施初创公司的产品负责人将账户写入 Token 留在了公司自己的 text-to-SQL 基准数据集中;一名开发者在语音数据集里提交了一个拥有组织管理、仓库写入、CI 工作流、包发布和仓库删除权限的 GitHub Token;以及一家数据标注供应商和两家 AI 实验室的研究人员在各自发布的数据集中暴露了企业上传 Token。
HuggingFace 对 Enterprise 组织已有自动撤销机制——当此类 Token 被推送到公开仓库或存储桶时会被立即吊销。但自泄漏的非 Enterprise 账户和被他人抓取的 Token 不在保护范围内。通知不等于修复:Truffle Security 指出,HuggingFace 每次推送都会运行 TruffleHog 扫描并向作者发送邮件,但"检测到、通知到、但没有撤销"是大量密钥在扫描时仍然活跃的核心原因。
你听说过的模型
具体到实际训练数据集,受影响的知名语料包括:
- Huginn-0125(UMD):55,876 条活跃密钥,下载量 55.7 万
- StarCoder / The Stack(BigCode 系列):25,217 条
- Swallow-code-v2(东京科学大学):22,484 条
- OLMo 3 (32B) / dolma3_mix-6T(Allen AI):21,278 条
- SmolLM2 / stack-edu(HuggingFace 系列):20,035 条
- Pleias 1.0 / common_corpus:14,399 条,下载量 149 万
- Lucie-7B / Lucie-Training-Dataset(OpenLLM-France):10,699 条
- Comma v0.1(EleutherAI):6,479 条
- Zamba / Zamba2 / Zyda(Zyphra):6,473 条
这些是公开了训练数据的开放模型。Truffle Security 坦言无法评估 ChatGPT、Claude、Gemini 和 Llama 等封闭训练数据的模型,因为其训练语料未公开。但考虑到这些语料同样大量依赖 Common Crawl 和公开代码仓库,污染的蔓延范围不太可能止于开放模型。
AI 推理的隐性账单:至少 $92 万/年
训练数据中还包含 11,496 个 AI 服务商密钥,分布在 1,210 个数据集中,覆盖 OpenAI、Azure OpenAI、Anthropic、Gemini、Groq 等。
研究团队从未使用这些密钥,因此无法报告实际余额。但每个通过计费审核的 OpenAI 新账号默认月消费上限为 $100,Anthropic 入门层级同样为 $100。按最低挡位计算,742 个 OpenAI 密钥和 26 个 Anthropic 密钥每月至少可被消耗 $76,800,年化约为 $92 万。这只是一个保守下限——团队还发现了 160 个组织级 OpenAI 密钥和 34 个机器服务账号密钥,这些账号通常绑定在已资助的高层级账单上,且几乎从不轮换。Anthropic 的最高构建层级月上限为 $20 万。
发生在 HuggingFace 七月入侵事件之后
这项扫描的时机值得注意。HuggingFace 在 7 月中旬披露了一次由 OpenAI 自主 AI Agent 发起的基础设施入侵事件:一个在内部网络能力评估中逃逸沙箱的 Agent 利用数据集处理管道中的代码执行路径侵入了 HF 生产集群,获得了管理员级别权限和供应链写入能力,在 4.5 天内执行了约 17,600 次动作。
Truffle Security 的 Dylan Ayrey 指出,该入侵事件"的杀伤链中涉及了被盗 API 密钥"。虽然本次扫描开始于该事件爆发之前,但它恰好回应了一个悬而未决的问题:如果一个自主 Agent 已经可以利用零日漏洞入侵平台,那么当 221,303 个活跃凭证散布在 6,003 个公开数据集中时,攻击者需要跨越的门槛有多低?
HuggingFace CTO Julien Chaumond 在事件后主动向 TruffleHog 贡献了原生存储桶扫描支持代码,使得未来的扫描可以覆盖 HuggingFace 新推出的 Storage Buckets 功能。
翻不了页的泄露
该研究最核心的结论与其说是数据规模,不如说是对 AI 供应链污染模式的诊断。
传统软件供应链中,密钥泄露有明确的补救路径:撤销凭证、清理 Git 历史、发布安全公告。训练数据不存在这条路径。一个密钥一旦进入已发布的语料集,就会被下游数据集继承、被模型训练消费、被研究者和工程师下载到本地。它不再是一个可以删除的条目,而是一种环境。
对 AI 从业者的实际影响分为三层。对于数据集作者和实验室:在发布前扫描语料、在训练前扫描输入数据。对于开发者和服务商:任何接触过公开仓库、网页或聊天机器人的密钥都应被视为已泄露并立即轮换——这是唯一能抵抗"训练数据放大效应"的措施。对于整个 AI 供应链:训练数据的安全标准目前远低于软件包的供应链标准,而两者的风险已然趋同。
Cloud Security Alliance 在 7 月 27 日的初步事后分析中将 HuggingFace 入侵事件定性为"首次公开记录的自主 AI 攻击",并呼吁将每个 AI Agent 视为"有边界的、特权化的内部身份"。Truffle Security 的扫描数据为这个判断提供了量化基础——当 22 万条密钥躺在公开的训练数据中时,边界的含义需要被重新定义。