终端弹出一行询问,你顺手按了「Yes, and don’t ask again」。清净了。
但那条命令——连同里面那串数据库密码——已经被原样写进项目里的 `.claude/settings.local.json`。
安全公司 Apiiro 在 11 月 5 日发布研究:公开 GitHub 上躺着 104,185 份这种文件,其中 1,122 份明文存着真密钥,算上 git 历史、共享配置和对话记录,一共 2,539 个密钥、1,994 个仓库、63 家组织。漏的东西不轻:光数据库密码就 379 个,另有 122 个 Supabase 密钥、23 个 AWS 密钥,以及多个 SSH root 登录口令。微博小红书微博小红书

机制一点都不神秘
你让 Claude Code 连数据库、调接口,它拼出来的命令里本来就带着口令——不带跑不起来。它问你要不要允许,你选「不再询问」,整条命令就成了一条 allow 规则。

要命的是下一步:Claude Code 只把这个文件加进你这台机器的全局 git 忽略,不写进项目自己的 `.gitignore`。换电脑、仓库后来才初始化、文件早就被提交过——三种情况全漏。已经进了索引的文件,事后往 `.gitignore` 里补一行也拦不住。更别扭的是,Claude Code 其实能察觉到这个文件已经被跟踪,却不告诉你。微博小红书知乎
最扎心的是这个
1,122 份含密钥的文件里,gitleaks 找出 564 份,TruffleHog 找出 643 份,有 215 份两个都没报。不是扫描器太菜。它们按密钥格式识别——固定前缀、固定长度、固定字符集。而 `PGPASSWORD=` 后面那串,在扫描器眼里就是个普通单词。行业公认的防线,对最常见的泄露形态反而最不敏感。小红书微博
还有个细节:在追溯过提交历史的 1,105 个含密钥仓库里,539 个的提交中有 Claude 参与,并改过这个文件。大概率是它自己顺手 commit 上去的。知乎微博
这些密码也不是刚漏的——有一半,已经在公开仓库里躺了超过 217 天。小红书
但也别急着恐慌
含密钥的文件只占扫描总量的约 1%。真正的风险要两个条件同时成立:存的规则里确实有明文密钥,并且这文件被提交、公开或分享了出去。批准带通配的命令模式(比如 `Bash(npm run:*)`)时,存进去的只是模式,不含密钥。Anthropic 这边也回应了。Claude Code 负责人 Boris Cherny 在 Hacker News 上说,团队在研究怎么防这类问题,包括让 auto mode 识别、内置基础的密钥扫描。Apiiro 并没有逐个验证这些密钥今天还能不能登录,目前能确认的是:被通知的公司里,有一家承认自家密钥当时仍然有效。微博知乎小红书微博
现在就去做的四步
一、翻文件。 打开项目里的 `.claude/settings.local.json`,看 allow 规则里有没有明文密码、token、私钥。看归看,别把内容贴到任何公开地方。
二、先轮换,再清理。 顺序不能反。删文件也没用,git 历史、fork、克隆里都还压着。知乎微博小红书
三、停止跟踪。 `git rm --cached .claude/settings.local.json`,再把这条路径写进项目自己的 `.gitignore`。注意这条命令只从索引移除文件、保留本地文件,不会清除 git 历史。要清历史得用 `git filter-repo` 重写,会牵动所有克隆和 fork,动手前先跟团队打招呼。微博
四、改习惯。 命令里用变量(`$DB_URL`)代替明文,授权批模式而不是整条带密文的命令。小红书

说到底,这不是谁攻破了 Claude Code。是一个图省事的开关,把「授权记忆」变成了新的攻击面。