GitGuardian 2026 年报告发现 24008 个有效凭据暴露在公开 MCP 配置文件中,Claude Code 协助提交的代码有 3.2% 泄漏率,API 密钥和令牌存储在配置文件、环境变量、日志和临时文件中。
AI 编码 Agent 正在泄露凭据:Cursor、Claude Code、Copilot 与 MCP
隐藏的痕迹: Cursor、Claude Code 与 GitHub Copilot 将凭据存储在配置文件、环境变量、日志、shell 历史记录和临时文件中,而代码仓库及 CI 扫描器从未检查这些位置。
证据: GitGuardian 的《2026 年秘密 sprawl 现状》报告在公开 MCP 配置文件中发现了 24,008 个独立秘密,其中 2,117 个仍有效;此外 Claude Code 辅助提交的秘密泄露率为 3.2%。
解决方案: GitGuardian Developer Endpoint Protection 通过本地 Agent 清单、机器扫描、AI Hooks 和蜜标机制在整个 fleet 层面发现这一痕迹,使安全团队能够在被入侵前完成修复。
Agent 式编码工具可以读取文件、执行命令并调用外部服务。向模型提供商、源代码控制平台和已连接工具的身份验证会产生多种导致凭据残留在终端的方式:
存储方式: API 密钥和令牌可以放置在 Agent 或 MCP 配置中。部分工具则使用 OS 密钥链或 OAuth 流程。
复制方式: 从保险库或环境中获取的凭据可能被写入本地文件以供调试或复用,由此产生一个不受管控的副本。
记录方式: 提示词、命令输出、调试日志和会话历史可能在缺少或未完整执行脱敏的情况下捕获凭据。
其中部分文件可能因疏忽被提交,但许多文件根本不会进入代码仓库。
在一台管理良好的工作站上,这些痕迹可能只是孤立的卫生问题;但在大型组织中,若工具分散化管理、有承包商参与、多个业务单元并存且终端策略执行不一致,相同模式会在整个 fleet 中成倍放大。安全团队可能知道他们扫描了哪些代码仓库,却仍然无法掌握访问这些代码仓库的机器上运行着哪些 Agent、连接着哪些 MCP 服务器、以及持有哪些常驻凭据。
以下是各工具的具体痕迹情况。
Cursor 维护两个 MCP 配置:一个位于项目内部(随代码仓库一起分发),另一个在用户主目录中(永远不会进入代码仓库)。两者都接受内联凭据——本地服务器使用环境变量,远程服务器使用请求头。Cursor 的 MCP 文档还描述了远程服务器的 OAuth 和变量引用替代硬编码值的方式,但这两者都未被强制执行。
项目级配置文件位于代码仓库内,因此一个内联令牌就可能被提交并分发给所有克隆该仓库的开发者。用户级配置文件则产生相反的问题:凭据和服务器定义可能完全游离于代码仓库管控之外。在大型 fleet 中,不同团队可能用不同的令牌、不同的权限范围和不同的存储实践将 Cursor 连接到不同的内部系统。没有终端清单,安全团队就无法可靠地了解这些配置的存在,也无法确定哪些机器持有对敏感服务的访问权限。
Claude Code 在用户主目录中保存用户状态,外加一个配套的 JSON 文件——其中包含登录会话、用户级 MCP 服务器以及每个项目的信任决策。登录令牌是这台机器上保护最严密的数据:在 macOS 上它存储在 OS 密钥链中,在 Linux 和 Windows 上存储在受权限保护的文件中。Anthropic 的文档补充说明,macOS 在密钥链不可用时(如在 SSH 会话中)会回退到该文件。保护主登录令牌并不能清点在机器其他位置可能遇到的 API 密钥、连接字符串和工具凭据。
Claude Code 的项目级 MCP 文件设计初衷是将其纳入版本控制,以便团队共享配置。该工具支持环境变量引用和密钥链存储 OAuth 令牌,但不阻止团队直接内联写入令牌。一旦发生这种情况,文件会被到处推送和拉取,令牌也随之复制到代码仓库历史记录中以及接收该配置的每台机器上。
Copilot 的终端占用面积因编辑器、CLI、操作系统和身份验证方式而异。这种差异本身就是治理问题:安全团队无法制定一条文件路径规则就认为整个 fleet 已被覆盖。Copilot CLI 和 Claude Code 都允许开发者通过环境变量重定位整个状态目录。
Copilot CLI 默认将 OAuth 令牌存储在操作系统密钥链中。当没有密钥链可用时,GitHub 的文档描述了系统会提示将其存储在明文配置文件中,并有一个设置可以将该行为设为默认。
主令牌只是整条痕迹的一部分。同一目录还包含 MCP 服务器定义、会话日志、命令和会话历史记录、SQLite 会话存储区、保存的权限决策,以及在密钥链不可用时 MCP OAuth 材料的回退存储(目录引用)。在整个大型 fleet 中,即使只有少数机器使用明文回退、环境令牌或过度授权的 MCP 配置,也会产生大量凭据库存,而代码仓库扫描无法触及这些凭据。
以下路径为各供应商在 2026 年 9 月的文档记录。这些路径经常变化,因此在基于其中一个路径编写策略规则前,请查看对应链接页面。
Model Context Protocol 服务器让 Agent 能够访问源代码控制、云提供商、数据库、SaaS 应用和内部服务等系统。每个新连接都可能引入另一个非人类身份和另一个具有真实组织访问权限的凭据。MCP 支持 OAuth、环境变量引用、凭据存储和运行时辅助工具,但这些更安全的模式在非托管安装中不会被自动强制执行。
当凭据被内联写入时,三个工具的 MCP 配置文件都会变成明文凭据存储区。项目级文件也可能通过版本控制共享。GitGuardian 的《2026 年秘密 sprawl 现状》分析在公开 MCP 相关配置文件中发现了 24,008 个独立秘密,其中包括 2,117 个有效凭据。公开代码仓库暴露了可见部分,但企业终端和内部代码仓库可能以相同模式存在于公众视野之外。
影子 AI 的扩张速度快于政策。各个团队可以在几分钟内添加 Agent 和 MCP 服务器,而安全审查、采购、MDM 策略和身份治理则按不同的时间节奏推进。Fleet 清单在完成之前就已过时。
攻击面在整个 fleet 中不断叠加。每个集成都可能引入另一个身份、凭据、配置路径、权限决策或历史存储。乘以数千名开发者,微小的本地异常会迅速演变为治理问题。
AI 辅助工作流显示出更高的观察泄露率。GitGuardian 的《2026 年秘密 sprawl 现状》分析发现,Claude Code 辅助的公开提交中秘密泄露率为 3.2%,而所有公开 GitHub 提交的基线为 1.5%。当然,这一测量结果并未将因果关系单独归因于工具本身,但它表明,更快的开发速度并未消除底层的凭据泄露问题。
现有控制措施可能完全按设计运行,却仍然无法覆盖这一层:
代码仓库、预提交和 CI 秘密扫描覆盖的是其配置所指定的被跟踪内容、工作树变更或流水线输入。它们不会遍历无关的主目录配置、浏览器存储、shell 历史记录或临时文件。
IdP、IAM 和 PAM 管理它们颁发或观察到的身份和会话。本地复制的 API 密钥和不受管控的第三方令牌落在此周边之外。
秘密管理器保护存储在保险库中并通过保险库检索的凭据。一旦凭据被写入日志、历史记录文件或临时文件,除非其他控制措施发现了它,否则管理器无法管控不受管的副本。
在大型企业中,每当开发者添加一个 Agent、连接一个新的 MCP 服务器或复制一个令牌以加快本地工作时,这一未测量到的缺口就会扩大。缺失的控制措施是设备层面的全 fleet 凭据发现。
Developer Endpoint Protection 将这个不可见的终端问题转化为 fleet 级别的安全项目,包含四个可独立部署的能力:
本地 Agent 和 MCP 清单: 可视化了解每个终端上运行着哪些受支持的 AI Agent 和 MCP 服务器,以及它们可以访问哪些数据和工具以及如何使用。
机器扫描: 按计划对配置文件、dotfiles、日志、IDE 和 Agent 缓存、shell 历史记录、临时目录、浏览器存储、压缩包及其他支持的格式进行文件系统扫描。发现结果按严重性和访问范围评分。
AI Hooks: 通过支持的 AI 编码工具 Hooks 进行实时扫描。提示词提交和预工具检查可以阻止提示词、命令、文件读取和 MCP 调用中的秘密。后工具检查会通知开发者,因为该工具已经运行过了。
蜜标保护: 在每个受保护的机器上放置一个诱饵 AWS 凭据。它不授予任何访问权限,任何使用它的尝试都会触发与该终端关联的告警。
有三个设计选择对它们如何适应你的环境至关重要。
隐私: 检测在本地进行。GitGuardian 通过 HasMySecretLeaked 协议接收 256 位 Scrypt 指纹、文件路径和时间戳等发现元数据,以及机器和用户清单元数据。GitGuardian 不会收到明文秘密或源文件内容。可选的合法性检查将凭据直接从终端发送到其提供商,不经过 GitGuardian。
部署: 推荐方法是 MDM 调度的脚本,而非持续运行的 EDR 风格 Agent;launchd、systemd 和配置管理部署方式也均有文档记录。
适配性: 它补充而非替代代码仓库和 CI 扫描、保险库、IdP、PAM、EDR 和 DLP。入侵发生后,团队可以按严重性和权限对发现结果排名,创建事件,并遵循修复工作流撤销或迁移凭据并脱敏受支持的本地痕迹。
