1.1% 设定档泄密:Claude Code 逾千凭证外泄
核心要点
资安公司 Apiiro 揭露 Claude Code 因“不再询问”机制,将含密码指令存入设定档并上传 GitHub,导致逾千份真实凭证外泄,官方回应称档案不应上传。
据 Woofun AI 消息,资安公司 针对 在 上的设定档泄漏事件发布研究报告,指出逾千份真实密码与金钥因"不再询问"功能外泄至公开储存库,引发业界对 AI 开发工具资安机制的关注。
11 月 5 日,Apiiro 发布的研究报告显示,团队扫描了 GitHub 上 104,185 份 Claude Code 的专案设定档.claude/settings.local.json,发现其中 1,122 份(占比 1.1%)含有真实的密码或金钥。这些档案本应仅存于本机,却因使用者操作与版本控制机制的疏漏,被上传至公开的 GitHub 储存库,导致敏感资讯暴露于网路。
漏洞的成因在于 Claude Code 的"Yes, and don't ask again"(同意且不再询问)按钮机制。当使用者对 Claude Code 提出的指令按下此按钮后,整串指令连同其中的密码会原样存进 settings.local.json 档案。虽然 Claude Code 设计上会将此档案加进使用者的全域 git 排除清单,但 Apiiro 指出,这种保护在资料夹之后才变成 git 储存库、在另一台电脑重新复制专案,或档案早已被 commit 过的情况下会失效,因为排除规则并未写进专案自己的.gitignore,导致档案换到别处便失去保护。
从技术细节来看,Git 保护机制的失效与模型归因密切相关。在追查到的 1,105 个含真实密码的储存库中,有 539 个的设定档是由标示 Claude 共同作者的 commit 修改,涵盖 Sonnet 4.5 到 Opus 5.5 等近期模型。Apiiro 强调,用 Opus 5.5 与 Fable 5.1 都能重现这个情况,问题出在 Claude Code 的行为逻辑,而非模型本身的缺陷,这意味著即使使用最新模型,若未正确管理.gitignore,仍可能导致凭证外泄。
Woofun AI 整理数据显示,外泄内容的详情揭示了严重的资安风险。这 1,122 个档案共藏有 1,379 组不重复的密码与金钥,超过三分之一可直接连进资料库,包括 379 组资料库密码与 122 把 Supabase 服务金钥,另有 43 组 SSH 登入资讯,部分甚至是伺服器的 root 密码。受影响的机构达 63 个,涵盖学生社团、新创、软体外包商到老牌厂商。Apiiro 举例,其中包括一家资料库厂商自己的云端管理金钥、一家支付新创的资料库密码,以及一家医疗纪录 App 的资料库拥有者密码。Apiiro 于 11 月 2 日、3 日通知各机构,有一家公司证实外泄的金钥当时仍可使用。
历史遗留风险与扫描工具盲区进一步加剧了问题的严重性。含密码的档案中位数已在储存库里放了 217 天,Apiiro 在档案的历史版本里又找到 734 组已不在现行档案中的密码,另有 211 个分叉储存库复制了同样的内容。再加上团队刻意共用的.claude/settings.json、代理对话纪录与交接笔记,Apiiro 总共在 1,994 个储存库找到 2,539 组真实密码。
值得注意的是,一般的密码扫描工具也会漏掉这些风险。Apiiro 用 与 扫这 1,122 个档案,分别只抓到 564 个与 643 个,有 215 个两套工具都没发现,原因是扫描工具认的是金钥格式,而写在 mysql -p 或 sshpass -p 后面的密码看起来只是一般指令里的一个字。

评论
暂无评论