安全厂商 Apiiro 对外披露,Anthropic 旗下 AI 编程 Agent Claude Code 存在凭据泄露漏洞:当用户选择 “Yes, and don’t ask again(是的,不再询问)” 永久放行命令时,整条命令原文(内嵌密码、API Key、数据库令牌等敏感信息)会存入项目目录下的 .claude/settings.local.json;一旦开发者把这个配置文件提交推送到公开 GitHub 仓库,敏感凭据直接明文暴露,扫描一共在 1994 个公开仓库里找到 2539 条有效凭据,Anthropic 官方已经确认问题,正在推送补丁修复该存储逻辑。
一、漏洞基础信息清单
- 受影响产品:Anthropic Claude Code(CLI 编程 Agent)
- 触发入口:命令审批弹窗选项「Yes, and don’t ask again」
- 泄露文件:.claude/settings.local.json
- 发现方:安全企业 Apiiro
- 统计结果:1122 份公开文件样本包含密钥,合并 Git 历史、分支、Fork 后,检出 2539 个凭据
- 漏洞性质:不是外部黑客入侵,属于功能设计缺陷,自动持久化保存带密钥的完整命令
- 官方状态:已确认,紧急迭代新版本,修改持久化规则
二、两种审批模式对比表
| 审批选项 | 存储行为 | 安全风险 | 适用建议 |
|---|---|---|---|
| Yes(仅本次允许) | 本次会话临时放行,不会写入 settings.local.json | 极低 | 日常优先选择,用完即失效 |
| Yes, and don’t ask again(不再询问) | 完整命令原样持久保存到项目 json,包含密码、token | 极高,一旦提交 Git 就泄露 | 尽量不要使用该选项 |
三、漏洞产生完整流程
- 在 Claude Code 执行任务,Agent 发起 shell 命令权限申请,命令中包含明文密码、数据库口令、API 密钥;
- 用户点击「Yes, and don’t ask again」永久放行这条命令;
- Claude Code 把整条原始命令写入项目目录 .claude/settings.local.json 的 allow 数组;
- 开发者未把 .claude/ 加入 .gitignore,执行 commit、push 上传 GitHub;
- 仓库公开后,任何人都能下载这个 json,直接读取明文凭据;
- 即使后续删除文件,Git 历史记录、Fork 副本里依然保留密钥。
四、立刻执行的应急处置步骤
- 检索仓库:在所有使用 Claude Code 的项目,查找是否存在 .claude/settings.local.json;
- 凭据轮换:只要该文件里出现过密码、API Key、数据库账号,优先全部重置、吊销,删除文件不能消除已经泄露的风险;
- 添加忽略:在项目 .gitignore 增加一行 .claude/settings.local.json,阻止后续提交;
- 清理 Git 历史:如果已经推送到公开仓库,用 BFG Repo-Cleaner 等工具清理历史记录,同时通知 Fork 仓库持有者;
- 临时规避:在官方修复版本发布前,放弃使用「不再询问」选项,每次仅选择单次 Yes;
- 更新版本:等待 Anthropic 发布修复包,升级 Claude Code CLI。
五、适用场景与风险边界
✅ 风险最高场景
- 数据库连接命令、psql、mysql、redis-cli 命令携带明文密码
- curl 请求附带 Authorization、token 参数
- 云厂商 CLI 命令传入 AccessKey、SecretKey
- 脚本、容器启动参数直接注入密钥
⚠️ 边界说明
- 这个文件是项目本地配置,只有提交到 Git 才会外泄,本地使用、不上传仓库不会泄露;
- 不是所有 settings.local.json 都带密钥,只有勾选 “不再询问” 的命令才会写入;
- 修复方案方向:不再原样存储完整命令,改用模式匹配,剥离明文密钥;
- 该漏洞不影响网页版 Claude 对话,只针对本地 CLI Claude Code。
六、自查检查清单
- 全局搜索本机所有项目目录,查找 settings.local.json;
- 检查 git 提交记录,确认是否存在 .claude 目录提交记录;
- 梳理近两周 Claude Code 执行过的带密钥命令,批量轮换密钥;
- 团队统一模板,新项目默认在 gitignore 屏蔽 .claude/ 配置文件。
【相关 FAQ】
问题 1:Claude Code 爆出凭据泄露漏洞,触发 2539 个凭据泄露的原因是什么?
回答 1:Claude Code 的 “Yes, and don’t ask again” 永久放行功能,会把整条包含密码、密钥的命令原样保存在 .claude/settings.local.json,开发者误提交到 GitHub 公开仓库,导致凭据明文泄露,累计检出 2539 个凭据。
问题 2:Claude Code 密码写入项目文件漏洞,删掉 settings.local.json 就安全了吗?
回答 2:直接删除文件不够,Git 历史、别人 fork 的副本里还保留这份文件,并且密钥已经对外暴露,必须先吊销、轮换对应的密码和 API 密钥,再清理 Git 历史。
问题 3:Claude Code 该漏洞,在官方修复之前怎么临时规避?
回答 3:临时方案是不要点「Yes, and don’t ask again」,每次授权只选择单次 Yes;同时在项目 gitignore 加入 .claude/settings.local.json,防止该配置文件被提交上传。
【参考资料】
[2026-11-07](Claude Code's “Don't Ask Again” File Exposes Passwords and Keys)The Hacker News
[2026-11-09](Claude Code Leaked 2,539 Secrets Onto GitHub)DEV Community
[2026-11-09](Anthropic Claude Code 泄露开发者密钥事件报道)iTnews
[2026-11-10](Claude Code 密钥泄露事件)IT 之家
【免责声明】
本文基于 Apiiro 安全报告、The Hacker News 等公开资讯整理;漏洞修复进度、新版本发布时间以 Anthropic 官方仓库公告为准;一旦遭遇该漏洞,密钥吊销、仓库清理存在操作风险,高权限生产密钥建议尽快执行轮换,本文不构成企业安全审计方案。
