What they did not do Claude Code 的时候点过「是,以后别再问了」,你的数据库密码可能已经躺在 GitHub 上了。
AI 安全公司 Apiiro 的研究人员发现:Claude Code 有一个一直存在的本地配置文件 .claude/settings.local.json,它会把用户批准过的 shell 命令原样记下来——包括命令里带的密码、API token、私钥。这些文件被大量上传到了公开的 GitHub 仓库里。
泄露规模有多大
- 10 万+:Apiiro 找到的、Claude Code 本地配置文件被上传到公开仓库的案例数量
- 约 1,100 个:其中真正含有敏感信息的文件,来自 63 家不同组织,内容包括公开 API token、数据库密码、私钥、root 登录凭据
- 215 个:这 1,100 个泄露的密钥里,有 215 个连 gitleaks 和 TruffleHog 这两个主流扫描工具都没扫出来
- 删了也没用:文件从仓库删除后,密钥仍然存活在原项目的 fork 里
它是怎么漏出去的
机制不复杂。Claude Code 执行 shell 命令前会问你批不批准,如果你选「是,以后别再问了」,这个决定会被存成一条规则写进 .claude/settings.local.json。规则有时候被抽象成模式,但很多时候整条命令被原样写进去——命令里如果带了 mysql -u root -p'密码' 这种,密码就一起进去了。
文件留在本地其实不算安全问题。Anthropic 的文档里也写了,这个文件会被加进开发者的全局 .gitignore。问题出在第二步:全局 .gitignore 不会体现在仓库层面。也就是说,仓库被 clone 到另一台机器、或者某个文件夹后来才变成 git 仓库的时候,这个本该被忽略的文件就跟着进去了。Apiiro 还提到,很多情况下 Claude Code 会自己把这些改动 commit 上去,用户压根没参与。
最扎心的是:这个 bug 一年多前就被报过
早在 2025 年 8 月,就有人在 Claude Code 的 bug 报告里提过这个问题。后续还有报告指出,敏感配置文件有时没被加进 .gitignore,或者 Claude Code 会把敏感命令写进另一个不受 git 保护的文件。这些报告都在 60 天无活动后自动关闭了,没有采取任何行动。
直到上周末 Hacker News 上讨论起来,Claude Code 团队的 Boris Cherny 才回应说「正在研究能怎么防止」。他的说法是,这类配置文件本来就不该被提交进版本控制,出事的案例看起来都是「文件被手动创建并提交上去的」。他推荐用户改用 Claude Code 的 auto 模式,靠分类器自动放行常规权限请求,省得手写 allow/deny 列表。
但当另一位用户指出,auto 模式下敏感命令照样会被写进配置文件,Cherny 的回应是「抓得好」,团队「正在想怎么改进」。他也建议大家都上密钥扫描工具,并说团队在考虑把扫描能力直接做进 Claude Code。
What This Means for Ordinary Users
这件事的教训不在于「Claude Code 不安全」,而在于 AI 编程 Agent 正在变成新的凭据泄露源头。它需要你的权限才能干活,它记录下来才能「别再问」,它记录下来就得落到磁盘上,落到磁盘上就会被 git 带走。这条链条上每一环都合理,合起来就漏了。
同类事故今年已经不止一次:上个月 一个躺在下载文件夹里的 AGENTS.md 就能偷走 API Token;更早还有 macOS 给 AI Agent 全盘访问权限的风险,以及专门做这个赛道的公司 被 5 亿美元收购。Agent 安全已经是一条独立的产业了。
现在该做什么(10 分钟自查)
如果你在用 Claude Code,按下面这几步走一遍,比看完新闻再收藏有用得多。
- 查文件在不在仓库里:在项目根目录执行
git ls-files | grep -i "claude/settings"。有任何输出,说明你的配置文件已经被 git 跟踪了。 - 查历史提交:
git log --all --oneline -- .claude/settings.local.json。删掉当前文件不等于清干净,历史里还有。 - 查远端:
git ls-remote之后再翻一遍 GitHub 网页端搜索,确认没上传过;已经上传过的,直接当作密钥已泄露处理。 - 立刻轮换:不要纠结「有没有人看到」。数据库密码、云厂商 AK、支付密钥,一律重置。这比排查快得多,也更保险。
- 加仓库级忽略:在项目
.gitignore里加.claude/settings.local.json,然后git rm --cached .claude/settings.local.json。全局 .gitignore 靠不住,仓库级才保险。 - 装扫描器但别全靠它:gitleaks / TruffleHog 都上,但记住这次 1,100 个里有 215 个它们没扫出来。
要不要因此不用 Claude Code
不用。这个问题的根因是「把权限决策持久化到可提交的文件里」这个设计选择,不是 Claude Code 独有——任何带持久化权限记忆的 Agent 都有同样的坑。真正该改的是习惯:凡是 Agent 自动生成的配置文件,一律当作可能含密钥的敏感文件对待。顺带一提,Anthropic 今年在模型身份证明 FlashProve这类溯源能力上投入不少,但对自己家工具的配置安全,这次确实慢了半拍。
Frequently Asked Questions (FAQ)
Claude Code 这个泄露会影响所有人吗?
不会。前提是你的 .claude/settings.local.json 没有进过 git。受影响的只有那些把配置文件提交到公开仓库、或者被 Claude Code 自动 commit 上去的仓库。自查方法见上文,一条命令就能确认。
Anthropic 修好了吗?
截至发稿没有。官方目前的说法是「正在研究」,没有版本更新,也没有默认行为改变。团队推荐的临时缓解是改用 auto 模式 + 配置密钥扫描,但这两种都不算根治——auto 模式同样会把敏感命令写进配置文件。
已经提交过的密钥,删掉仓库就安全了吗?
不安全。GitHub 的 fork 会保留原始提交历史,别人 fork 过你的仓库,密钥就还在他那边。另外搜索引擎和爬虫也可能已经抓走了。正确做法是立即在服务商后台轮换密钥,而不是指望删仓库。
Cursor、Cline 这些工具有同样的问题吗?
原理上都有风险。凡是把「你批准过的命令」持久化到工作目录内的配置文件、并且该目录是 git 仓库的工具,都存在这条泄露路径。建议逐个检查它们各自的本地配置文件是否已被 git 跟踪。
Summarize
10 万个上传案例里只有 1,100 个真含密钥,比例不算高,但 63 家组织的凭据已经实打实暴露了。这个 bug 报了一年多没人管,最后是被 Hacker News 顶出来的——对 Anthropic 来说不太好听,对所有用 Agent 写代码的人来说则是提醒:Agent 的便利和它的攻击面是同一枚硬币.
想继续追 AI 工具的安全与实测?看我们的 AI Model Library and Tool Comparison Engine,或读:Claude Code 深度评测 · Claude Code Projects Multi-Agent · NVIDIA 失控 Agent 安全平台 · OpenAI Agent 图片泄露.
