您的位置首页 >人工智能 >

GitGuardian 复核 Claude Code 密钥泄露23276 个公开 GitHub 仓库检出 31088 个密钥,17% 检测时仍有效

本次 GitGuardian 独立复核,专门针对 Claude Code 的.claude/settings.local.json配置文件做扫描核验,和 Apiiro 前期检索做交叉验证;一共在公开 GitHub 的 23276 个仓库找到 31088 条独立密钥,其中 5343 条在检测当时核验为有效,占比刚好 17%。风险根源在于:开发者在 Claude Code 里选择 “永久允许” 命令时,工具会把包含密钥的完整信任规则写入这份本地配置文件,很多开发者误把该文件提交进 Git 仓库,直接把 API 密钥、连接凭证公开。这个文件本就不应该被提交到代码仓库,却变成了新的密钥泄露高发载体,同时还有一部分泄露同步扩散到 Docker Hub 镜像中。

一、复核核心数据汇总

项目数据详情备注
扫描对象GitHub 公开仓库 .claude/settings.local.json时间范围 2025.1–2026.11.7
覆盖仓库数量23276 个公开仓库含分支、历史提交、fork 仓库
检出独立密钥总数31088 个多类型 API 密钥、连接凭证
检测时有效密钥5343 个只读核验,未做恶意调用
有效占比17%是下限值,部分密钥类型无自动校验器
Docker Hub 同步泄露613 个密钥,99 个有效通过COPY .把本地配置打包进镜像
典型泄露文件.claude/settings.local.json存储永久信任授权记录、MCP 配置、密钥

补充:Apiiro 只做检索,没有核验密钥有效性;本次 GitGuardian 新增了只读有效性校验,是本次独立复核最核心的增量价值。

二、为什么 settings.local.json 会携带密钥

Claude Code 的信任机制设计:当你执行一条带密钥的 Shell 命令,并且选择 “总是允许(yes, and don’t ask again)”,工具会把整条命令原文保存进settings.local.json作为永久放行规则,密钥直接明文写入 JSON。

  • 区分:settings.json偏向团队共享 MCP 配置,settings.local.json是本机项目的本地信任记录,设计初衷仅留在开发者本地电脑
  • 常见错误:项目初始化直接全量提交、.gitignore没有配置、打包 Docker 镜像时直接复制整个项目目录
  • 密钥类型:云服务商密钥、MCP 工具凭证、数据库连接串、第三方平台 Token 等

三、风险放大链路

  1. 开发者本地使用 Claude Code,永久放行带密钥指令 → 密钥写入settings.local.json
  2. 开发者执行 git add 全部文件,忽略该文件 → 提交到公开 GitHub 仓库
  3. 仓库被爬虫、威胁情报工具抓取,密钥被批量收集
  4. 部分项目打包 Docker 镜像,COPY .同步把配置文件打进镜像,扩散到 Docker Hub
  5. 攻击者拿到有效密钥,直接调用对应服务、消耗额度、访问业务资源

四、快速自查与修复步骤

  1. 本地仓库检查:全局搜索.claude/settings.local.json,确认是否存在
  2. 密钥处置:只要文件里存在密钥,立刻到对应平台轮转、作废所有泄露凭证
  3. Git 历史清理:该文件一旦提交,单纯删除最新版本没用,需要清理 Git 历史
  4. 增加 gitignore:在.gitignore固定增加一行:.claude/settings.local.json
  5. Docker 优化:镜像构建不要直接 COPY 项目根目录,使用.dockerignore 排除.claude 目录
  6. 前置防护:接入 ggshield、pre-commit 钩子,提交前扫描密钥;开启 Claude Code 的 AI 安全钩子

五、长期治理方案

  1. 规范信任策略:尽量避免 “永久允许” 带密钥的命令,优先使用单次授权
  2. 密钥分离:MCP 连接、工具凭证改用环境变量、系统密钥链,不要写在命令行里
  3. 持续监控:对公开仓库、镜像仓库做持续密钥扫描,重点跟踪.claude/、.mcp/配置文件
  4. 团队培训:明确区分 “可共享配置 settings.json” 和 “绝对不能提交的本地配置 settings.local.json”
  5. 端点防护:在开发机部署本地密钥扫描,在 AI Agent 执行前拦截带密钥的敏感指令

六、容易混淆的两个文件对比

文件用途是否建议提交仓库泄露风险
settings.json团队共享 MCP 服务配置谨慎提交,变量化密钥中风险,密钥容易硬编码
settings.local.json本机永久信任命令记录严禁提交高风险,明文保存完整命令 + 密钥

【相关 FAQ】

问题 1:GitGuardian 独立复核 Claude Code 密钥泄露,本次复核和之前 Apiiro 的检索最大区别是什么?

回答 1:GitGuardian 独立复核 Claude Code 密钥泄露,Apiiro 只检索仓库文件、不验证密钥是否可用;GitGuardian 额外做只读有效性校验,算出 17% 的密钥在检测时还能正常使用,这也是本次复核最关键的新增结论。

问题 2:GitGuardian 独立复核 Claude Code 密钥泄露,密钥是 Claude Code 本身的账号 Token 吗?

回答 2:不是,GitGuardian 独立复核 Claude Code 密钥泄露,这批泄露密钥大多是开发者命令里附带的第三方 API 密钥、MCP 工具凭证,不是 Claude 自身的登录会话 Token,是永久信任规则把命令原文(含密钥)保存进了本地配置文件。

问题 3:GitGuardian 独立复核 Claude Code 密钥泄露,已经提交到 GitHub 的 settings.local.json,只在最新版本删掉文件就安全了吗?

回答 3:不安全,GitGuardian 独立复核 Claude Code 密钥泄露,Git 历史里依然保留这份文件,攻击者可以回溯历史拿到密钥;必须轮转密钥,同时清理 Git 提交历史,否则泄露持续存在。

问题 4:GitGuardian 独立复核 Claude Code 密钥泄露,Docker Hub 上的泄露是怎么产生的?

回答 4:GitGuardian 独立复核 Claude Code 密钥泄露,开发者写 Dockerfile 时用COPY .把整个项目目录打包进镜像,本地的.claude/settings.local.json跟着被打包,推送到 Docker Hub 后形成二次泄露。

问题 5:GitGuardian 独立复核 Claude Code 密钥泄露,怎么从源头避免 settings.local.json 被提交?

回答 5:GitGuardian 独立复核 Claude Code 密钥泄露,优先在.gitignore 和.dockerignore 加入排除规则;尽量少使用永久放行带密钥的命令;搭配 ggshield 前置扫描,提交前拦截密钥文件。

【参考资料】

[2026-11-09](Claude Code settings.local.json Secrets: GitHub, Docker Hub)GitGuardian 官方博客

[2026-09-25](AI Coding Agents Are Leaking Credentials on Endpoints)GitGuardian

[2026-03-17](The State of Secrets Sprawl 2026)GitGuardian

[2026-08-25](Agentic AI Security Comes Down to Access, Not the Trick)GitGuardian

[2026-06-26](AI Is the Newest Developer To Misunderstand Secrets In Your Git History)GitGuardian

【免责声明】

本文基于 GitGuardian 公开研究报告整理,17% 有效密钥比例为报告中只读核验场景下统计值,不代表所有同类型密钥都会有效;密钥有效性会随平台轮转、权限变更发生变化;开发者发现密钥泄露后,应第一时间在对应服务商后台作废凭证并清理 Git 历史;本文仅用于安全风险研究、自查参考,不支持任何未经授权的密钥探测、调用行为。