Claude Code配置泄露:勿点“不再询问”,密码与API Key恐被上传
一个「不再询问」,怎么就把密码给存下来了?
只想让 AI 少问几遍,结果把家底一并交了出去。
安全公司 Apiiro 的研究人员近日发现,公开的 GitHub 仓库里冒出大量
Claude Code 配置文件,其中不少还夹着数据库密码、API Key,甚至超级管理员登录凭证。
研究人员继续追查后指出,这场泄露风波与 Claude Code 里一个看似不起眼的选项有关:「Yes, and don’t ask again」(是的,以后不再询问)。
一个「不再询问」,怎么就把密码给存下来了?
要弄清这次的问题,先得看 Claude Code 的权限管理机制。
用 Claude Code 时,AI 若要执行涉及系统操作的命令,一般会先向用户请求授权。
比如开发者让 Claude Code 查询数据库,AI 可能生成这样一条命令:
- PGPASSWORD=your_password psql -h db.example.com -U admin
用户点下允许执行,Claude Code 就会运行这条命令。
可要是用户接着选了「Yes, and don’t ask again」(是的,以后不再询问),情形就不一样了。
为了下次执行相同操作时不再发问,Claude Code 会把这条命令存成一条长期生效的权限规则,写进项目目录下的:
- .claude/settings.local.json
这个功能本意是提高开发效率。
问题在于,Claude Code 存下来的可能并非脱敏后的命令模板,而是完整命令。
换句话说,上面那条命令里的 your_password,可能原封不动地留在配置文件中。
其他命令也可能出现类似情况。开发者让 Claude Code 用 curl 请求某个 API 时,如果请求头里带着 Authorization Token,这条命令被保存为权限规则后,Token 也可能跟着进了配置文件。
一个原本用来记录「哪些操作可以免去重复授权」的文件,就这样意外成了敏感信息的集中存放地。
问题出在 Git 忽略规则上
有人可能会问:既然是本地配置文件,为什么会被传到 GitHub?
其实
Anthropic 并非完全没考虑过这一点。
Claude Code 官方文档写明,.claude/settings.local.json 本就设计为个人使用的本地配置文件,不应提交到 Git 仓库。
按正常流程,Claude Code 第一次创建该文件时,会自动把它加进 Git 的全局忽略规则(global gitignore)。
但这里有个容易被忽略的区别:全局 Git 忽略规则,并不等于项目自身的 .gitignore 文件。
举个例子:
开发者 A 在自己的电脑上使用 Claude Code,系统自动把 settings.local.json 加进了本机的 Git 忽略规则。
这样一来,该文件就不会正常进入 Git 仓库的提交流程。
可一旦项目被搬到另一台机器,或者在本来没有 Git 仓库的目录里新建仓库,新环境不一定继承了原先那套全局忽略规则。
还有一种情况:文件已被 Git 跟踪,或者开发者自己新建了这份配置却没把它写进忽略列表,那它照样可能被一并提交上去。
麻烦还不止于此。安全研究公司 Apiiro 的研究人员发现,某些情形下 Claude Code 自身也会参与到提交这些含敏感信息的配置文件的过程中。
说到底,配置文件本身的存在并没有错,缺的是一层足够可靠的防护。
安全公司调查:数千条密码、Token 已经暴露
那么,受此影响的开发者究竟有多少?
11 月 5 日,安全公司 Apiiro 公开了一份相关调查报告。
研究人员逐一检查了公开 GitHub 仓库中的 104,185 个 .claude/settings.local.json 文件,结果发现 1,122 个文件里含有真实的敏感凭证,合计 1,379 条。
这些凭证牵扯到 63 家不同组织,类型包括服务 API Token、数据库密码、AI 模型 API Key、Supabase 服务角色密钥、Google API Key、SSH 登录凭证、GitHub、GitLab 和 npm Token,以及 AWS 密钥、私钥等。
按类别看,数据库密码与 Supabase 服务角色密钥加起来有 501 条,在全部 1,379 条凭证中占到 36.3%。

让研究人员更担心的是另外 43 条 SSH 凭证,它们可用于登录公网服务器,其中一部分甚至牵扯到 Root 账户密码。
这还没算完。
11 月 9 日,安全公司 GitGuardian 又公布了规模更大的调查结果。
从 2025 年 1 月至 2026 年 11 月 7 日,GitGuardian 在公开 GitHub 上找到 23,276 个仓库中的 .claude/settings.local.json 文件,识别出的不同敏感凭证累计 31,088 条,其中 5,343 条在检测那一刻仍然有效。
有一点已经很清楚:这不能归为少数开发者一时疏忽的低级错误,整个开发者社区都该对此保持警觉。
Anthropic 团队回应:正在研究解决办法
其实,这个问题并非近日才冒出来。
早在 2025 年 8 月,就有开发者在 Claude Code 的 GitHub Issue 里反映过类似情形:用户批准含凭证的命令后,敏感信息会以明文写进配置文件。
那之后,社区里又陆续出现了其他相关反馈。
可这些报告最终都因为长时间没有更新被系统自动关闭,实质性的处理并没有发生。
直到这次安全研究公开,问题才重新进入公众视野。
Claude Code 团队负责人 Boris Cherny 也在 Hacker News 的相关讨论中亲自出面回应。
他承认,Claude Code 过去并没有内置清理敏感信息的机制,团队眼下正在研究如何规避这类问题。
针对配置文件外泄一事,Cherny 的说法是,.claude/settings.local.json 压根就不该进版本控制系统,Claude Code 在自行创建该文件时,会把它自动写进 Git 忽略规则。他还劝开发者改用 Claude Code 的 Auto Mode,别再手动去维护那套又长又复杂的允许、拒绝规则。
按他的介绍,Auto Mode 靠分类器自动处理日常的权限请求,开发者不必一遍遍回来改权限规则。
可有用户提出,就算开了 Auto Mode,碰上敏感命令的授权操作,相关内容照样可能被写进配置文件。Cherny 对这个反馈表示认可,并称团队在琢磨怎么改。
他还说,团队在考虑把基础的 Secret Scanning 直接做进 Claude Code,眼下处于研究和原型验证阶段。
问题在于,Apiiro 的研究还发现,gitleaks 和 TruffleHog 这两个常见的敏感信息扫描工具即便搭配着用,也漏掉了 215 个含敏感凭证的文件,占相关文件总数的 19.2%。可见光靠现成的扫描工具,未必能把问题清干净。
开发者现在应该做什么?
对已经在用 Claude Code 的开发者而言,这次事件里真正要紧的,不是把某个文件塞进 .gitignore 就算完事。第一步可以先翻一翻项目里的 .claude/settings.local.json,看里面有没有带密码、Token 或其他凭证的命令。
接着,要在项目自己的 .gitignore 里写明:.claude/settings.local.json。项目如果还要打成 Docker 镜像,那 .dockerignore 里也应当把 .claude/ 排除掉。
要是已经发现敏感凭证被提交进了公开仓库,光删文件远远不够。Git 历史记录、Fork 仓库,还有已经发出去的 Docker 镜像,都可能继续留着这些信息。
所以更要紧的是先撤销并轮换已经暴露的 API Key、数据库密码和其他凭证,再去处理仓库历史记录和别的公开副本。
另外,命令里需要用到的敏感信息,尽量走环境变量引用,别把密码或 Token 直接写进命令参数。
说到底,AI 编程工具原本是想让开发者少操点心。结果连自己电脑里的密码都得额外提防会不会被它顺手打包传上去,这份便利确实还有不少地方要补。