根据应用安全公司 Apiiro 的最新研究,Anthropic 的克劳德代码中最方便的按钮——“是的,不要再问”——已经悄然变成了一台凭证泄露机器。当开发人员批准包含机密的命令时,Claude Code 会将包含机密的确切命令保存到本地设置文件中,该文件通常最终会提交到公共 GitHub 存储库。 Apiiro 的扫描发现1,994 个公共存储库中存在 2,539 个真实秘密:数据库密码、云 API 密钥、令牌和 SSH 根登录信息,分布在 63 个组织中,其中大多数是软件公司。一家受影响的公司向研究人员证实,暴露的密钥是有效的。这是本月发生的第二起 Claude Code 隐私事件,此前该工具通过 User-Agent 标头向网站披露用户电子邮件,而这一次涉及生产基础设施,而不仅仅是联系方式。我们在人工智能工具报道 中密切关注人工智能编码代理的安全性。
权限规则如何成为泄漏
该机制是 Claude Code 权限系统的副作用,该系统在运行 shell 命令之前需要获得批准 - 通常每个会话多次。要求代理调试数据库连接或调用内部 API,它建议的命令携带任务所需的任何凭据,因为没有它们它就无法工作。
选择“是,不再询问”,Claude Code 运行该命令并将权限规则写入项目文件夹内的“.claude/settings.local.json”。该规则不是抽象的:它是完整的命令字符串本身、以纯文本形式输入的密码等等。
该文件被设计为保留在开发人员的计算机上,并且 Claude Code 确实尝试通过将其添加到开发人员的全局 git 忽略列表中来保护它。这涵盖了常见情况,但不包括边缘情况:稍后成为存储库的文件夹、不存在全局忽略的另一台计算机上的克隆,或者在添加忽略条目之前某人提交的文件。至关重要的是,该规则永远不会出现在存储库自己的“.gitignore”中,因此项目不会受到任何保护。
使问题更加复杂的是,Claude Code 经常自行提交文件。在 Apiiro 追踪到真正秘密的 1,105 个存储库中的 539 个中,Claude 与人共同创作的提交更改了设置文件 - 提交的模型名称范围从 Sonnet 4.5 到 Opus 5.5。 Apiiro 指出,该行为是 Claude Code 自己的,而不是模型的:该公司在 Opus 5.5 和 Fable 5.1 中都复制了该行为。
暴露的规模
Apiiro 在 GitHub 上统计了 104,185 个“.claude/settings.local.json”的公共副本。其中,1,122 个至少包含一个真正的秘密。研究人员在存储库 git 历史记录、团队故意提交的共享“settings.json”文件以及签入存储库的保存的代理聊天记录中发现了 1,160 个秘密。
Apiiro 示例文档读起来就像最差实践清单。数据库供应商公开了自己的管理级云 API 密钥(具有管理访问权限且无过期时间)及其集群主机。一家 B2B 初创公司泄露了生产 Azure Postgres 密码。一家软件机构公开了 Square 生产访问令牌。一家构建医疗记录应用程序的 IT 服务公司泄露了该数据库的所有者密码。开源项目的表现也好不到哪儿去:一个拥有超过 1,000 颗星的项目发布了 OpenAI 格式的 API 密钥,另一个则发布了 npm 代币。
安全环境使这一发现变得更糟。窃取凭证的恶意软件已经大量席卷了开发人员的机器——Apiiro 指出 Shai-Hulud npm 蠕虫,它在受害者的文件上运行 TruffleHog 扫描仪。该扫描仪会标记 Apiiro 发现的 1,122 个泄露文件中的 643 个。更令人担忧的是残留物:五分之一的泄露文件既没有被 TruffleHog 也没有被 gitleaks 标记,通常是因为秘密是在命令中输入的密码,而不是可识别令牌格式的密钥。换句话说,秘密扫描仪在结构上对此类泄漏一无所知。
受影响的团队应该做什么
Apiiro 的修复指南从确定爆炸半径开始。在您的 GitHub 组织中搜索“.claude/settings.local.json”和“.claude/settings.json”——每个点击都是任何人现在都可以读取的文件。检查每个存储库的 git 历史记录中的文件,即使该文件已被删除,因为每个分支和克隆都会保留历史记录中包含的任何内容。然后审核每台开发人员计算机上的本地副本:允许列表中的每个条目都是某人批准的命令,以及在其中输入的任何内容。
公司的排序很重要:首先轮换,其次清理。从存储库中删除文件对已经公开的凭据没有任何影响,并且 git 历史记录会无限期地保持暴露的秘密。
一种模式,而不是一次性的
对于 Anthropic 来说,这一发现是在 Claude Code 被发现通过 User-Agent 标头将用户电子邮件地址泄露到其访问的每个网站一周后得出的,这一错误通过发布隐私修改来修复,批评者称其为创可贴。这两起事件有一个共同的根本原因:代理处理强大的上下文(凭据、联系方式、内部主机名),并就该上下文的传输位置做出默认决策。
这个教训概括了克劳德代码之外的内容。随着编码代理成为标准设备,它们编写的自我组织文件正在成为软件供应链中一个新的、未经扫描的角落。 Apiiro 的数据表明,角落已经出现泄漏,其规模大多数组织尚未开始衡量。
保持人工智能领先地位
人工智能工具的发布速度快于其安全审查的速度。关注我们的 AI 新闻报道 中的每一个进展。
阅读更多人工智能新闻 →