技术

Claude Code明文保存密码,GitHub上1122个文件遭曝光

Susan Hill
在 Google 中添加我们

Anthropic 的 Claude Code 在运行大多数 Shell 命令前都会征求用户许可,其中一个选项是“Yes, and don’t ask again”(“是,并且不再询问”)。如果选择该选项的命令中包含密码,比如数据库登录密码,Claude Code 就可能把整条命令连同密码一起写进项目中的纯文本设置文件。安全研究人员如今在 GitHub 的公开代码仓库里发现了数以千计的此类密码和密钥,任何人都能读取。

如果你在使用 Claude Code,可以查找名为 settings.local.json 的文件。它位于仓库根目录下隐藏的 .claude 文件夹中;只要不采取措施阻止,它就会随项目一起传播。无论在哪个提供这款工具的国家,情况都一样。改掉使用习惯只需一分钟,但处理泄露的密码要费时得多,因为删除文件并不会将它从 git 历史记录或他人的分叉仓库中抹去。

据 The Hacker News 报道,软件安全公司 Apiiro 搜索了 GitHub 公开内容,发现 103,617 个仓库中共有 104,185 份该文件。其研究显示,约 1.1%、也就是 1,122 份文件中至少包含一项秘密信息,涉及的不同凭证总计 1,379 个。其中超过三分之一可直接用于访问数据库,包括 379 个数据库密码。此外还包括 43 组用于登录公共服务器的 SSH 凭证、42 个 GitHub、GitLab 和 npm 令牌,以及 23 个 Amazon Web Services 密钥。

这些文件的持有者并不只是业余爱好者。Apiiro 追查到 63 家机构,主要是各种规模的软件公司;其中最严重的案例包括某数据库供应商自己的管理员级云密钥,以及一套医疗记录数据库的所有者密码。git 历史记录中的旧版文件还在 509 个仓库里留有另外 734 项秘密信息;74 个仓库的 211 个分叉版本也带有与原仓库相同的秘密信息。若再算上团队有意提交的共享设置文件,以及保存下来的智能体聊天记录,总数就达到 1,994 个仓库中的 2,539 项秘密信息。

Claude Code 确实会尝试避免将该文件纳入版本控制。Anthropic 的设置文档称,工具首次写入该文件时,会在用户的全局 git excludes 文件中添加一条规则,让 git 在这台电脑上忽略它。但这条规则不会随项目传到队友的笔记本电脑、构建服务器或新设备上;如果文件此前已经被提交,这条规则也无济于事。在研究人员追查的 1,105 个仓库中,有 539 个仓库的文件被一条署名 Claude 为共同作者的提交记录修改,这表明智能体常常会自行提交该文件。Apiiro 对比了 16 款编程智能体的文档,Claude Code 是唯一一款被确认默认会将完整的已获批准命令保存到项目文件中的工具。

常见的安全措施也会漏掉不少内容。Apiiro 用两款广受欢迎的开源秘密信息扫描工具 gitleaks 和 TruffleHog 检查了所有文件副本:gitleaks 标记出 1,122 份文件中的 564 份,TruffleHog 标记出 643 份,另有 215 份两者都未发现。漏检的大多是跟在 PGPASSWORD=、sshpass -p 或 mysql -p 后面输入的密码;对专门寻找已知密钥格式的工具来说,这些密码看起来就像普通词语。

这项研究也有一些需要注意之处。Apiiro 销售面向 AI 辅助开发的安全工具,因此这份研究同时也有推广产品的意味。研究人员没有测试这些凭证目前是否仍然有效,不过他们通知的一家公司确认,其密钥当时仍可使用。如果某个值符合已知密钥格式,或是出现在公共服务器地址旁边并经 AI 审核者确认,就会被计作秘密信息,因此仍存在一定的误报可能。Apiiro 还指出,共同作者相关的数据并不能证明每一项暴露的凭证都是 Claude 引入的。而 GitHub 只是可见的部分:该文件是项目文件夹中的普通 JSON 文件,因此也可能被打包进 npm 包、Docker 镜像、zip 压缩包或同步文件夹中。

研究人员给出的首要建议是先更换凭证:在清理任何内容之前,先更换该文件曾经保存过的所有密码、令牌和密钥,因为秘密信息一旦公开就已经失效,无论你是否重写历史记录。接着用 git rm –cached 停止跟踪该文件,将它加入仓库自己的 .gitignore,并在 Claude Code 中打开 /permissions,删除任何包含秘密信息的已保存规则。通过环境变量引用凭证,可以让已保存的规则记录 $DB_URL 这样的名称,而不是密码;而批准命令模式、而非单条命令,则能彻底避免将明文参数写入文件。

此前已有用户指出这一问题。2025 年 8 月 11 日提交的一份错误报告称,获准执行的命令中包含的 API 密钥和令牌,会被逐字保存到 settings.local.json 中;在 60 天没有活动后,自动化机器人于 1 月 3 日以“暂不计划处理”为由关闭了报告。Apiiro 于 11 月 6 日公布研究结果,并表示引用的四份相关报告全都被同一个机器人关闭,最近的一份就在 11 月 6 日,Anthropic 均未作回复。截至 11 月 2 日,研究人员发现的所有暴露文件仍留在各自仓库的主分支上;其中一半至少已存在 217 天。

The Hacker News 和 Apiiro 都没有报告 Anthropic 作出回应,而文档所述行为也没有变化:下次你对一条手动输入了密码的命令选择“不再询问”时,密码仍会一并保存。

标签: , , , , ,

在 Google 中添加我们

讨论

有 0 条评论。