安全公司 Apiiro 的研究人员在 GitHub 公开仓库里,从 Claude Code 的本地设置文件、Git 历史和智能体对话记录中,一共找出 2539 个真实凭据,分布在 1994 个代码库里,涉及 63 个组织。泄露的东西包括 Azure 数据库密码、Square 生产环境令牌、SSH root 登录信息,还有一个医疗记录数据库的所有者密码。
问题出在一个很多人每天都会点的按钮上。

“不再询问”写进了什么
Claude Code 执行 Shell 命令前会请求授权。用户选”是,且不再询问”,这条规则就写进项目目录下的 .claude/settings.local.json,以后同类命令不再弹窗。麻烦在于,写进去的往往是命令原文:如果那条命令里直接带着数据库连接串、API 令牌或密钥,它们也被原样存进了这个文件。
按 Anthropic 的文档,Claude Code 创建这个文件时会配置 Git 忽略它。Apiiro 的统计显示,这道防线在不少场景下失效了:项目被克隆到另一台电脑、普通文件夹后来才初始化成 Git 仓库、或者文件被强制加入版本控制,settings.local.json 都可能被一起推上去。
Apiiro 给出的几个数字:
- 公开 GitHub 上有 104185 份
settings.local.json,分布在 103617 个仓库; - 其中 1122 份(约 1.1%)含有真实机密,去重后 1379 个;
- 追溯到的 1105 个仓库里,有 539 个出现过由 Claude 署名参与、修改了这个文件的提交。
文件越大,风险越高。超过 8KB 的文件里大约每十份就有一份藏着真密钥,小于 500 字节的不到五百分之一。授权规则一条条累积,用户点”不再询问”的时间越长,文件里攒下的东西越多。
Apiiro 没有测试这些凭据目前是否仍然有效。仓库所有者即便删掉文件,Git 历史和已有的 fork 里,密钥仍可能保留着。
这个问题早就有人报过
2025 年 8 月 11 日,就有用户在 Claude Code 的问题追踪里报告:被批准的命令连同里面的 API 密钥和令牌,被一字不差地存进了 settings.local.json。这份报告后来因为 60 天无活动被自动关闭,没有得到修复。
一年多以后,同样的机制被系统性地扫描出来。Claude Code 负责人 Boris Cherny 在 Hacker News 上回应称,设置文件本来就不该进版本控制,团队正在研究预防办法,考虑把密钥扫描直接做进 Claude Code,在此之前建议用户自己跑密钥扫描工具清理。修复版本什么时候发布,Anthropic 还没有给出时间。
这也不是 Claude Code 这个月第一次在本地数据处理上被挑出问题。本月早些时候,它被指出会在部分网络请求里带上用户邮箱,当时的修复同样是先出缓解措施、正式版本随后跟进。两件事的共同点在于,智能体工具为了少打扰用户而把信息落盘或外发,开发者很难察觉它到底记下了什么。
开发者现在能做的
如果用过 Claude Code,可以先在本地和远端仓库里搜一遍 .claude/settings.local.json 和 .claude/settings.json,看看里面有没有带明文凭据的命令。确认泄露过的密钥要直接作废重发,光删文件不够。
更稳妥的习惯是别把密钥写进命令行参数,改用环境变量或密钥管理工具引用;再给仓库开上 GitHub 的密钥扫描或类似的提交前检查,让这类文件在推送前就被拦住。
参考来源:IT之家、Apiiro 研究报告、CocoLoop、Ars Technica、The Hacker News;核验设置文件数量、含密钥文件占比、凭据总数与受影响组织数。