一次「不再询问」,命令连密钥一起存档
安全公司 Apiiro 11 月 5 日发布研究,作者为 Shmulik Cohen 和 Matan Giladi。让 Claude Code 查数据库或调 API 时,它提议的命令往往带着配置里的密钥;用户若选「Yes, and don't ask again」,这条命令会原样作为允许规则写进项目目录下的 .claude/settings.local.json。Apiiro 称这是 Claude Code 工具本身的行为,用 Opus 5.5 和 Fable 5.1 都能复现。Claude Code 在仓库内创建该文件时会把它加入开发者的全局 git 忽略列表,但不写进仓库自己的 .gitignore,换机器克隆、先有文件后建仓库或文件早已提交的情况都不受保护。
公开仓库里的规模
Apiiro 于 11 月 1 日至 3 日检索公开 GitHub 默认分支,在 103,617 个仓库中找到 104,185 份该文件,1,122 份(1.1%)含真实密钥,共 1,379 个不同值,其中有 379 个数据库密码、43 组 SSH 登录和 23 个 AWS 密钥。可追溯的 1,105 个仓库里,539 个出现过由 Claude 联合署名、改动该文件的提交。算上 git 历史、团队共享的 settings.json 与智能体对话记录,总计 1,994 个仓库中的 2,539 个密钥,涉及 63 个组织,一家公司确认泄露的密钥当时有效。gitleaks 与 TruffleHog 分别只标出 564 份和 643 份文件,215 份两者都未发现,因为写在 PGPASSWORD=、sshpass -p 之后的密码不符合常见密钥格式。这里的「真实密钥」指符合服务商格式或指向公网主机的凭据,Apiiro 没有逐一验证可用性。
官方回应与自查
Claude Code 负责人 Boris Cherny 11 月 7 日在 Hacker News 回复称,Claude Code 此前不做密钥清洗,团队会先试做让自动模式拦截、内置基础密钥扫描等方案;他同时表示该文件本不应提交,建议改用自动模式并开启代码托管平台的密钥扫描。Apiiro 建议先轮换文件中出现过的所有凭据,再用 git rm --cached 取消跟踪并写进仓库 .gitignore,命令里用环境变量引用密钥,按命令模式而非完整命令授权。
via: Apiiro:Coding Agents Copy Your Secrets to a Hidden File. Thousands Are on GitHub、Hacker News 讨论(含 Boris Cherny 回复)