点一下“以后别再问”,你的数据库密码就进了公开仓库
字

字节笔记本

2026年11月8日 · 约 6 分钟读完

点一下“以后别再问”,你的数据库密码就进了公开仓库

赞助API中转
¥120

点一下“以后别再问”,你的数据库密码就进了公开仓库

安全公司 Apiiro 11 月 5 日发布研究《Claude Code "Don''t Ask Again" exposes passwords》(研究者 Shmulik Cohen 与 Matan Giladi),当日登上 Hacker News(114 分、85 条评论)。先定性:这是安全厂商的调查结论,不是已证实的入侵事件——Apiiro 没有验证这些密钥是否仍被使用,只有一家被通知的公司确认其密钥当时有效;另外 Apiiro 本身卖安全产品,有商业立场,以下全部带“据 Apiiro 研究”的定语来读。

MadRobot 报道配图

机制:批准的完整命令原文落盘

Claude Code 跑 Bash 命令前会问权限;点下“Yes, and don''t ask again”后,按 Claude Code 官方权限文档口径,这条批准会以 allow 规则存进项目里的 .claude/settings.local.json。问题在于:规则存的是批准的完整命令原文——命令里带的数据库密码、token 一并明文落盘。

规模:2,539 个密钥、1,994 个仓库

据 Apiiro(2026 年 11 月 1–3 日采集公开 GitHub 数据):104,185 份公开的该文件里,1,122 份(约 1.1%)含密钥,共 1,379 个不同密钥值;算上 git 历史版本、团队会主动提交的共享设置文件与 agent 对话记录,总计 2,539 个密钥、1,994 个仓库,涉及 63 个组织、多为软件公司。泄露内容举例:某数据库厂商自己的管理级云密钥、生产环境 Azure Postgres 密码、Square 生产 token、某医疗记录应用数据库的 owner 密码;分类统计:379 个数据库密码、43 个公开服务器 SSH 凭证、42 个 GitHub/GitLab/npm token、23 个 AWS 密钥——超过三分之一可直接连数据库。

Cybernoz 报道配图

删文件清不掉,扫描器还会漏

时间与顽固性:泄露文件的中位数在公开仓库里已存在 217 天(以 11 月 2 日快照计);截至周一,含密钥文件仍在仓库默认分支上;旧版本留在 git 历史与 fork 里——另有 734 个密钥只存在于历史版本(509 个仓库)、211 个 fork 携带同样密钥。常规扫描也会漏:1,122 个含密钥文件里,gitleaks 检出 564 个、TruffleHog 检出 643 个,215 个两者都漏——多为 PGPASSWORD= 后直接跟密码这类“密码写进命令”的形态。

为什么会进仓库:保护不跟着项目走

Claude Code 文档称,首次在 git 仓库里写该文件时会把它加进开发者的全局 git 排除(core.excludesFile);但这只覆盖“当时已是仓库”的情况——之后才变成仓库的文件夹、换电脑 clone、或文件早已提交的情况都不覆盖,且规则从不写进项目自己的 .gitignore。Apiiro 追踪的 1,105 个仓库里,539 个有 Claude 联署的提交改动过该文件——很多时候是 Claude 自己把文件提交了。研究者还对照了 16 个 coding agent 的文档:Claude Code 是唯一确认默认把完整批准命令写进项目文件的;他们在 Opus 5.5 与 Fable 5.1 上复现了该行为。另有公开报告称批准有时会写进团队主动提交的 .claude/settings.json——76,011 份公开副本里也发现 298 份含密钥。Anthropic 方面:用户自 2025 年 8 月起提交过 4 份相关报告,Apiiro 称均未获回复、其中 3 份已被自动关闭;Anthropic 截至 2026-11-07 未公开回应(以写稿时核对为准)。

补救与判断

Apiiro 建议:全组织搜 .claude/settings.local.json 与 .claude/settings.json 并查各仓库 git 历史;已泄露的密钥必须轮换,只删文件不够。三点校准:① 责任链条是三环——批准存原文、文件未进忽略规则、提交公开,别写成“Anthropic 泄露用户密码”;② 与第十一批“联网搜索外发邮箱”、第三十批“连接器串线”机制完全不同,这篇是文件已公开、密钥已可读;③ “别再问”本质是便利与审计的交换——无人值守离不开 allow 规则,但规则里不该有生产凭证,密钥走环境变量或密管才是正路。

参考来源

相关文章

分享: