Claude Code 一句“不再询问”,把 2539 个真实密钥送上了 GitHub 公开仓库

Apiiro 研究配图:Coding Agents 把密钥复制进隐藏文件,成千上万份在 GitHub 上

安全公司 Apiiro 在 11 月 5 日发布的一项研究指出,Claude Code 的一个默认行为正在把开发者的真实密钥写进公开的 GitHub 仓库:在 104,185 份公开的 .claude/settings.local.json 文件里,有 1,122 份含有一个真实密钥;把 Git 历史、团队共用的配置文件和保存下来的 Agent 对话记录都算上,总数是 2,539 个真实密钥,分布在 1,994 个公开仓库,涉及 63 个组织,其中一家已确认泄露的密钥当时仍然有效。

点一下「不再询问」,密码就被写进了项目文件

事情的链条很短。让 Claude Code 查数据库或者调一个 API 时,它提出的命令里往往带着配置文件里的密码。执行前它会先征求确认,如果你选了「Yes, and don’t ask again」(是的,以后不再询问),它会把这条命令原样存成一条永久放行规则,写进项目目录下的 .claude/settings.local.json——密码也原样写了进去。

这个文件本该只留在开发者的电脑上。Claude Code 也确实做了防护:第一次在 Git 仓库里写这个文件时,它会把它加进用户的全局 git 忽略列表。但这道防护只在那一台电脑上生效,它永远不会写进仓库自己的 .gitignore,所以换一台电脑、或者换一个人克隆仓库,文件就可能跟着代码一起被提交上去。Apiiro 在追踪的 1,105 个含密钥仓库里发现,539 个仓库里有一条由 Claude 联合署名的提交改动过这个文件。

泄露的规模:数据库密码最多,常规扫描器查不全

Apiiro 在 11 月 1 日至 3 日用 GitHub 代码搜索做了统计。1,122 个含密钥的文件里共有 1,379 个不同的密钥,其中 636 个是云厂商格式的密钥,743 个是连着公开服务器地址的密码或令牌;单数据库密码就有 379 个,Supabase 服务端密钥 122 个。泄露内容里还包括一家数据库厂商自己的管理员级云密钥、一个生产环境的 Azure Postgres 密码、一个 Square 生产令牌和一个医疗记录应用数据库的属主密码。

更麻烦的是,常规的密钥扫描工具对这类泄露并不灵敏。Apiiro 把 gitleaks 和 TruffleHog 都跑了一遍:gitleaks 只命中 564 个文件,TruffleHog 命中 643 个,215 个文件(约五分之一)两个工具都没报出来——因为密码是藏在 PGPASSWORD=…、sshpass -p 这类命令里的普通字符串,不符合密钥的固定格式。

Apiiro 也在报告里说明了统计口径的边界:它没有实际使用或测试任何一个密钥、也没有连接任何服务器,「真实密钥」指的是格式符合已知厂商、或密码紧邻着公开服务器地址;唯一确认有效的,是一家被通知到的公司亲口承认的。研究还提到,这个问题早在 2025 年 8 月就有人在 Claude Code 的 GitHub 上反馈过,据 Apiiro 统计当时均未得到 Anthropic 的回复。

Anthropic 已回应:正在想办法防止这类泄露

Apiiro 在 11 月 8 日更新了报告:Anthropic 的 Claude Code 负责人 Boris Cherny 已于 11 月 7 日在 Hacker News 上回应,表示团队「正在研究如何防止这种情况」,计划尝试的方案包括让自动模式识别这类命令、以及内置基础的密钥扫描。截至目前还没有正式的修复版本公布。

现在就该做的三件事

  • 先自查:在自己的 GitHub 组织里搜索 .claude/settings.local.json 和 .claude/settings.json,每一个命中都是现在任何人都能读到的文件。
  • 清理并加进仓库忽略规则:已入库的文件用 git rm --cached .claude/settings.local.json 移出版本控制,并把这条写进仓库自己的 .gitignore,而不是只依赖全局忽略列表。
  • 先轮换、再排查:一旦确认有密钥进过公开仓库,按「已泄露」处理,先轮换密钥,再去查访问日志。

这件事和模型本身无关,是工具的默认行为。Apiiro 的结论写得很直白:「这是 Claude Code 自身的行为,不是模型的问题」,他们用最新的 Opus 5.5 和 Fable 5.1 都复现了它。如果你平时用 Claude Code 写代码,可以顺手看看Claude Code Skill 的 3 种安装方法里有没有自己漏掉的配置;如果想让 Agent 顺带做安全检查,Cloudflare 开源的 security-audit-skill是现成的选择,技能装多了也可以参考47 个免费 Claude Code SEO 技能里一次装多个技能的做法。

转自 Apiiro 作者 Shmulik Cohen、Matan Giladi 的文章《Coding Agents Are Leaking Your Secrets to GitHub》,原文链接:https://apiiro.com/blog/coding-agents-leaking-secrets-github-dont-ask-again/

© 版权声明
THE END
喜欢就支持一下吧
点赞22 分享