[控场AI]
科技前沿· 5 分钟阅读· 2,621 字

点一下“不再询问”,1122份Claude Code配置带着密码上了GitHub

点一下“不再询问”,1122份Claude Code配置带着密码上了GitHub

Claude Code“不再询问”选项将明文密钥写入配置文件,已致1122份文件泄露至GitHub。

文章揭示了一起由AI编程工具默认行为引发的系统性凭据泄露事件。Claude Code在执行命令时弹出的权限确认框若被选择“是,不再询问”,工具就会把整条命令连同其中的密码、令牌和API密钥原样写入本地配置文件,使一次性输入变成磁盘上的持久化明文。更关键的是,许多开发者只在个人全局gitignore中添加了忽略规则,而项目级.gitignore并未配置,导致协作者提交时该文件被正常纳入版本控制并推送到公开仓库。研究人员已发现GitHub上存在1122份含明文凭据的配置文件,在追查的1105个仓库中有539个的敏感文件变更以Claude为共同作者。文章给出的应对措施是:轮换所有暴露凭据、用git rm --cached将文件移出版本控制并写入项目级gitignore、避免在命令行中直接写入密码。

收听播客对话
0:005:08

一个看似方便的“不再询问”按钮,正在把开发者的密码和密钥悄悄送进公开仓库。据B站AI快讯报道,GitHub上已发现1122份Claude Code配置文件包含明文密码和密钥,而问题的源头,正是那个被无数人顺手点下的确认选项。

一个按钮如何泄露你的密码

Claude Code在执行命令时,会弹出权限确认框。如果你选择了“是,不再询问”,工具就会把整条命令——连同命令里携带的密码、令牌、API密钥——原样写入本地的配置文件。

问题出在这个按钮,只要点了是,不再询问,Cloud Code就会把整条命令,连同里面的密码,原样存进本地透支线。

这个设计的初衷是减少重复确认、提升开发效率。但便利的代价是:敏感信息从终端的一次性输入,变成了磁盘上的持久化明文存储。换句话说,你以为只是少点了几次确认,实际上是把密钥抄写了一份放在项目目录里。

为什么本地文件会跑到GitHub上

很多人第一反应是:这个文件在本地的忽略规则里,不会被提交。问题恰恰出在这里。

那个文件是本地的,我甚至加了它到你的Gitignore,谁给它推到公众系统里呢?

开发者在个人全局Gitignore中加入了这条忽略规则,但它只在自己的机器上生效。项目本身的.gitignore文件里并没有写入对应规则,于是当其他协作者克隆项目、或者使用不同环境提交代码时,这个配置文件就可能被正常纳入版本控制,一路推送到公开仓库。

可那条忽略规则,只在你这一台电脑上管用,项目自己的忽略文件里,根本没写它。

全局忽略与项目忽略的边界,是这次泄露事件中最容易被忽视的环节。安全配置如果只存在于个人环境,就等同于没有配置。

Git 的忽略规则分为三个层级:项目级 .gitignore、全局级(通过 core.excludesFile 配置,通常位于 ~/.config/git/ignore 或 ~/.gitignore_global)、以及仓库内的 .git/info/exclude。优先级上,项目级规则随仓库分发、对所有协作者生效;全局规则只作用于当前用户的这台机器,不会随克隆传递。因此,若某文件只在全局被忽略、项目 .gitignore 中未声明,那么其他协作者提交时该文件仍会被 git add 纳入跟踪。一旦文件进入 Git 索引,后续即使补写忽略规则也不会自动失效,必须用 git rm --cached 显式移除跟踪。这也是安全配置必须落到项目级忽略文件、而非依赖个人环境设置的根本原因。

数据揭示了什么:1122份文件与539次提交

研究人员的追踪结果给出了更具体的规模。GitHub上存在1122份包含明文密码和密钥的Claude Code配置文件。在追查的1105个仓库中,有539个仓库里修改过该文件的提交,共同作者标注为Claude。

而且研究人员追查的1105个仓库里,有539个,改过这个文件的提交,共同作者写的是Cloud。

这组数据的含义值得细读:接近一半的被查仓库中,敏感文件的变更由工具自动产生。这意味着泄露不是个别开发者的疏忽,而是工具默认行为与版本控制流程叠加后的系统性风险。当AI编程助手替人“动手”时,它写入的内容同样会被Git如实记录。

“共同作者”(Co-authored-by)是 Git 提交信息中的一种 trailer 约定,格式为 Co-authored-by: Name <email>,常用于记录结对编程或工具辅助生成的提交。GitHub 会解析该字段并在提交页面展示多位作者头像。当 AI 编程工具代用户执行 git commit 时,若在提交信息中自动附加自身的共同作者标识,这些提交就会在元数据层面留下工具参与的证据。研究人员正是借助这一字段,把“敏感文件被修改”与“修改由 Claude 触发”关联起来,从而区分人为疏忽与工具自动行为,这也是 539 这个数字得以统计出来的技术前提。

泄露发生后,应该做哪三件事

如果你使用Claude Code并点过“不再询问”,建议按以下顺序处理。

第一步:轮换所有暴露过的凭据。 把曾经出现在命令行里的密码、API密钥、访问令牌全部更换。明文一旦进入公开仓库,即使后续删除,也可能已被抓取或缓存,换掉才是止损。

第二步:把配置文件移出版本控制。 使用git rm --cached将文件从跟踪列表中移除,并写入项目根目录的.gitignore。注意是项目级忽略文件,不是个人全局配置。

第三步:改变命令习惯。 不要把密码直接写进命令行。改用环境变量、密钥管理服务或交互式输入,让敏感信息不进入命令历史,也不进入工具的持久化记录。

凭据轮换(credential rotation)是指在不中断服务的前提下,为账户或密钥签发新的凭据并废止旧凭据。对 API 密钥,通常在服务商控制台生成新 Key、更新调用方配置后再删除旧 Key;对密码,则需在所有使用点同步更新。轮换的必要性在于:明文一旦进入公开仓库,Git 历史、fork、镜像站与爬虫缓存都可能保留副本,单纯删除当前文件并不能撤回已泄露的信息。更彻底的做法是借助 git filter-repo 或 BFG 等工具重写历史,但即便如此也应视为已泄露处理,轮换始终是止损的第一优先级。

工具便利与安全边界的再思考

这起事件的核心不是Claude Code一个产品的缺陷,而是AI编程工具普遍面临的设计张力:自动化程度越高,工具替用户做出的决定就越多,而这些决定未必符合每个项目的安全基线。

“不再询问”本质上是把安全确认的责任从工具转移给了用户的一次性判断,但用户往往在缺乏上下文的情况下点击确认。对开发者而言,这意味着需要重新审视AI工具的默认行为;对工具方而言,减少询问的同时,也应当对敏感内容的落盘方式给出更明确的保护。

方便和安全之间的那条线,值得在点下确认之前多想一秒。

#Claude Code#配置文件泄露#明文密码#GitHub安全#gitignore#AI编程工具#密钥泄露
分享:

相关推荐