在 Claude Code 中点击一次“是,且不再询问”,就可能把密码和 API 密钥以明文形式留在项目文件里——研究人员在 GitHub 上发现了 1,122 份该文件的公开副本,其中至少包含一个机密信息。这一发现来自安全公司 Apiiro,其研究于 2026 年 11 月 5 日发布,The Hacker News 于 11 月 7 日进行了报道。
机密信息如何进入该文件
原理很简单。默认情况下,Claude Code 在运行大多数 Shell 命令前会先征求确认。当开发者选择“是,且不再询问”时,工具会把一条允许规则保存到项目内的 .claude/settings.local.json 文件中。如果这条规则针对的是一条具体命令而非通用模式,那么命令中输入的任何密码或令牌都会被原样保存下来,以明文形式存储。
Apiiro 发现了什么
Apiiro 扫描了公开的 GitHub,发现了 104,185 份该文件,分布在 103,617 个仓库中。其中约 1.1%(即 1,122 个文件)至少包含一个机密信息,共计 1,379 个不同的凭证:379 个数据库密码、43 个公共服务器的 SSH 登录信息、42 个 GitHub、GitLab 和 npm 令牌,以及 23 个 AWS 密钥。这些文件属于 63 个组织,大多是不同规模的软件公司。其中最严重的案例包括一家数据库厂商自己的管理员级云密钥,以及一个医疗记录数据库的所有者密码。研究人员通知的一家公司确认,其泄露的密钥当时仍然有效。
问题不仅限于文件的当前副本。在 Git 历史中,研究人员又发现了 734 个机密信息,分布在 509 个仓库中;74 个仓库的 211 个分支(fork)也携带了与原始仓库相同的机密信息。再加上共享的 .claude/settings.json 文件和保存的智能体聊天记录,总数达到 1,994 个仓库中的 2,539 个机密信息。在一半受影响的仓库中,该文件公开已有至少 217 天。
Claude Code 会尝试让该文件不进入 Git:它首次在仓库中写入该文件时,会将其加入用户的全局 Git 排除列表。但这种保护只存在于那台电脑的设置中,不会随项目一起传播,因为该文件从未被加入仓库自身的 .gitignore。在研究人员追踪的 1,105 个仓库中,有 539 个仓库里由 Claude 担任共同作者的提交修改过该文件——这表明智能体本身经常提交它。
为什么扫描工具漏掉了这么多
常见的机密信息扫描工具也无法单独解决这个问题:gitleaks 标记了 1,122 个文件中的 564 个,TruffleHog 标记了 643 个,但有 215 个两者都未发现,通常是因为密码是直接写在命令中间的,例如 PGPASSWORD=、sshpass -p 或 mysql -p 之后。在 Apiiro 对比文档的 16 款编程智能体中,Claude Code 是唯一被确认会默认将完整获批命令保存到项目文件中的一款。
现在该怎么做
研究人员的建议是:先轮换凭证,再做清理。在组织内搜索 .claude/settings.local.json 和 .claude/settings.json,包括 Git 历史;更换这些文件曾经包含的所有密码、令牌和密钥;用 git rm --cached 停止追踪该文件,并将其加入仓库的 .gitignore;通过环境变量(如 $DB_URL)引用机密信息,而不是直接输入到命令中。批准 Bash(npm run:*) 这样的模式,而非单条命令,也能降低风险。
自 2025 年以来就已知的问题
这一行为早已被人知晓:自 2025 年 8 月以来,用户就在 Claude Code 的 GitHub 上报告过该问题,第一份报告来自 2025 年 8 月 11 日,称获批的含 API 密钥和令牌的命令会被原样存入该文件。据 Apiiro 称,四份相关报告均因长期无活动被机器人自动关闭——最近一份关闭于 11 月 6 日——截至报道发布时,Anthropic 均未作出回应。Apiiro 指出,他们没有测试所发现的凭证是否仍然有效。
另请阅读 Geekiki 的相关报道:苹果 Xcode 插件登陆 Claude Code。
图片来源:The Hacker News。
来源:
- The Hacker News — Claude Code's “Don't Ask Again” File Exposes Passwords and Keys in 1,122 Public Copies on GitHub
- Apiiro — Secure your agentic development (pesquisa original)
透明度声明:本文在人工智能的协助下制作,并与公开帖文和网络来源进行了交叉核对。请务必查阅文中引用的原始来源。
Muse