作为网络安全解决方案的先驱和全球领导者,Check Point® Software Technologies Ltd.(NASDAQ: CHKP,以下简称 Check Point)旗下的 Lakera,全球领先的代理式 AI 应用程序的 AI 原生安全平台供应商,揭示了使用美国 Anthropic 公司 Claude Code 时伴随的凭证泄漏风险。 这种信息泄漏可能发生在 Claude Code 使用期间生成的设置档中包含认证信息,并在 npm 套件发布时外部暴露。为了解实际情况,Lakera 进行了扫描,发现在已确认的约 13 个 `.claude/settings.local.json` 文件中,约有 1 个包含机密信息。 ## 背景 Claude Code 是一个基于终端机的 AI 编码辅助代理,它将授权的 shell 命令保存在项目目录中的本地设置档中。现已揭示,如果这个项目是一个 npm 套件,那么包含凭证的文件可能会被发布到公共注册中心。 Lakera 受 Kirill Efimov 先生的帖子启发,他首先指出了公开的 npm 套件中包含 `.claude/settings.local.json` 文件的案例。Lakera 进行这项调查旨在掌握问题的实际规模并广泛引起人们的关注。为了了解这个问题发生的普遍程度以及文件中包含的内容,Lakera 开发了一个扫描仪,该扫描仪使用 TypeScript 服务监控 npm 注册中心的 CouchDB 更改馈送。对于每个添加或更新的套件,它获取 tarball,检查其内容,如果存在 `.claude/settings.claude/settings.local.json`,则提取文件并保存以供分析。 ## Claude Code 权限模型的运作方式 Claude Code 对 shell 命令采用了权限系统。当 Claude 尝试运行一个以前未被允许的命令时,会提供几个选项。其中之一是「allow always」(总是允许)。如果选择此项,该命令字符串将按原样写入 `.claude/settings.local.json` 作为永久允许列表条目。此后,Claude 将不再要求确认该命令。 该文件位于项目目录根目录下的 `.claude/` 目录中,内容如下: 一旦命令被永久允许,它们都将被记录下来,包括当时命令中包含的任何凭证。例如,包含 Authorization 标头的 curl 命令,或以 `API_KEY=abc123` 等环境变量作为命令前缀的情况,都将被记录。所有这些都记录在此文件中,并且该文件保存在项目目录中。 ## npm 发布中的漏洞 npm 套件是从项目目录的内容生成的。文件可以通过 `.npmignore` 或 `package.json` 中的 `files` 字段排除,但两者都没有提供针对 `.claude/` 的默认设置。即使此目录存在,运行 `npm publish` 时也不会显示警告。设置档是一个隐藏的点文件,在正常发布流程的任何阶段都不会显眼。 `.claude/settings.local.json` 遵循与 `.env` 类似的命名约定。`.local` 后缀表示该文件是个人专用并依赖于特定环境。与 `.env` 不同,关于此的认知以及在发布前检测并发出警告的工具尚未普及。 ## 调查结果 在 Lakera 的扫描期间,在监控的约 46,500 个套件中,有 428 个套件包含了 `.claude/settings.local.json`,并确认其中 30 个套件的 33 个文件中包含了敏感信息。此结果表明,公开的设置档中包含敏感信息的比例约为 13 分之 1。