Claude Code 的“Yes, and Don’t Ask Again”选项可能会将密码和 API 密钥泄露给 GitHub

source: https://cybersecuritynews.com/claude-codes-yes-and-dont-ask-again/

Claude Code 的“是的,不要再问了”选项可以将密码和 API 密钥保存在项目设置中,这些设置稍后会发布到公共 GitHub 存储库。

Apiiro 的研究人员在 1,994 个公共存储库中发现了 2,539 个不同的秘密,这表明例行审批如何将私人凭证变成公共数据。

该研究确定了63家受影响的机构,其中大部分是软件公司。泄露的凭证包括数据库供应商的管理员级云密钥、生产环境Azure PostgreSQL密码、Square生产环境令牌以及医疗记录数据库的所有者密码。Apiiro表示,一家公司证实其泄露的密钥曾被使用。

漏洞始于日常开发工作中。开发人员请 Claude Code 检查数据库、测试 API 或排查登录失败的问题。Claude 会根据配置文件准备一个包含凭据的 shell 命令,然后在运行该命令前请求权限。

选择“是,不再询问”会将该命令及其密钥存储在本地.claude/settings.local.json。该命令会成为一条允许规则,允许 Claude Code 无需再次提示即可再次运行它。危险在于,当该本地文件被提交并推送到 GitHub 时。

Claude Code 确实会尝试防止这种情况发生。当它首次将文件写入 Git 仓库时,会在开发者的全局 Git 忽略文件中添加一条排除规则。然而,这种保护措施并不会随项目一起迁移,也无法覆盖已跟踪的文件,更无法可靠地保护之后转换为仓库的文件夹。

地方审批成为公开秘密
Apiiro 的研究分析了 104,185 个公开副本.claude/settings.local.json。研究人员在 1,122 个文件中发现了真正的秘密,这些文件包含 1,379 个不同的凭证。通过检查早期提交记录、共享设置和代理脚本,最终发现了 2,539 个秘密。数据收集工作于 2026 年 11 月 1 日至 3 日进行。

Anthropic 的设置文档证实,当前权限会保存在本地设置文件中。其权限指南解释说,shell 权限可以在会话之间保留。GitHub 上的一个 issue 报告称,早在 2025 年 8 月,已批准的命令中就存在明文凭据存储的情况。

区别至关重要。此次漏洞无需恶意提示或被盗账户即可暴露,而是遵循正常的审批流程。此前Claude Code 配置漏洞涉及攻击者更改项目设置以窃取 API 密钥,但此次发现的漏洞涉及在合法工作过程中记录的密钥。

Apiiro发现,数据库暴露的访问权限占比很高,其中包括379个数据库密码和122个Supabase服务角色密钥。其他发现还包括云凭证、私钥、软件包注册表令牌和43个SSH登录信息。部分SSH命令包含root密码。

标准扫描并未检测到所有问题。在 1122 个受影响的本地设置文件中,Gitleaks 标记了 564 个,TruffleHog 标记了 643 个。两个工具均未标记出 215 个文件。嵌入在 PGPASSWORD=、sshpass -p 或请求头内部的密码通常缺少用于识别提供商颁发密钥的清晰格式。

将这些文件从 GitHub 上移除也会带来本地风险。恶意软件可以读取受感染笔记本电脑上的明文设置。Shai -Hulud npm 供应链攻击已经表明,攻击者如何使用 TruffleHog 搜索开发者文件中的凭据。鉴于此,代理审批文件不仅是发布错误,更是一个实际的攻击目标。

开发人员应搜索当前文件和 Git 历史记录.claude/settings.local.json,并检查共享.claude/settings.json文件。审查密码、令牌、连接字符串和授权标头的允许规则。Apiiro 还在已保存的代理对话、内存文件和部署说明中发现了密钥。

首先应该进行轮换,而不是删除。在删除文件或重写历史记录之前,请撤销已暴露的凭据。取消跟踪本地设置,git rm --cached .claude/settings.local.json并将路径添加到存储库中.gitignore。

在命令中使用密钥管理器引用,而不是直接使用密码。安全团队应扫描代理文件夹和历史记录,检查命令中是否包含嵌入式密码以及可识别的 API 密钥。