AI coding assistants such as Claude Code, Cursor and Grok Build can execute arbitrary commands the instant a developer opens an untrusted repository, without any click or prompt. The flaw arises from the way these tools invoke Git’s core.fsmonitor feature to scan a project’s files.
为什么该问题现在至关重要
开发者越来越依赖 AI agent 来建议代码、重构函数,甚至编写整个模块。这些 agent 需要工作区的快速快照,因此它们会在后台运行 git status。当 Git 读取仓库的 .git/config 文件时,分配给 core.fsmonitor 的任何值都会被视为 Git 将要运行的 shell 命令。恶意攻击者可以在该配置项中放置精心构造的命令,在用户输入第一行代码之前,AI 的后台 Git 调用就会触发该命令。
代码以开发者自身的权限运行,绕过了 AI agent 通常运行的沙箱环境。在实践中,一个受损的仓库可以安装恶意软件、窃取凭据或篡改源文件,而此时开发者还以为助手仅仅是在提供建议。
攻击是如何展开的
- 准备阶段 – 攻击者创建一个仓库,其
.git/config包含类似core.fsmonitor = /path/to/malicious/script的行。 - 交付阶段 – 仓库以 zip 文件形式交付、从 USB 闪存盘复制、通过共享驱动器同步,或者以其他方式放置在受害者的机器上,且其中已包含
.git文件夹。 - 触发阶段 – 开发者在支持 AI 的 IDE 中打开该文件夹。助手运行
git status以收集上下文。Git 读取本地配置,执行core.fsmonitor命令,恶意脚本立即运行。
普通的 git clone 不会暴露此风险,因为 clone 会创建一个全新的、不含篡改配置的 .git 目录。只有当攻击者能够提供预先存在的 .git 文件夹时,攻击才会生效。
潜在风险
- 个人开发者可能会在不知情的情况下导致机器被入侵,丢失 AI agent 可以访问的所有数据。
- 团队如果通过内部驱动器或承包商提供的 zip 文件共享代码,可能会将载荷(payload)传播到许多工作站。
- 工具厂商如果用户将漏洞归咎于 AI 助手而非底层的 Git 交互,则面临声誉受损的风险。
由于恶意命令继承了用户的权限,它可以修改开发者可以修改的任何文件,包括 SSH 密钥、构建脚本或部署凭据。
开发者可以采取的缓解措施
不要信任本地 Git 设置。每当 AI 助手查询项目时,仓库的配置都会覆盖全局值。
在使用助手打开文件夹之前,检查
core.fsmonitor条目:git config --get core.fsmonitor如果出现任何值,请将其视为可疑。
使用以下命令删除该条目:
git config --local --unset core.fsmonitor检查其他 Git 可执行的风险键:
hooksPath、sshCommand、pager、editor、filter。使用相同的git config --get模式来验证它们是否为空。对于任何打算提供给 AI 工具的代码,优先使用干净的 clone。如果必须处理 zip 文件或传输的文件夹,请删除其
.git目录并重新初始化仓库,或者先运行上述检查。
责任归属
该漏洞并非 Claude Code、Cursor 或 Grok Build 所驱动的语言模型的缺陷;它是这些工具获取文件信息方式所导致的结果。一些厂商已开始更严格地对 Git 调用进行沙箱化处理,但默认行为仍然信任本地仓库设置。在行业采用一种标准(即在 AI agent 扫描工作区时剥离或忽略潜在危险的配置项)之前,开发者必须作为最后一道防线。
后续关注点
- 工具更新:在调用
git status之前明确对 Git 配置进行清理。 - 社区驱动的指南:关于安全 AI 辅助开发的指南,可能包括推荐的预检步骤。
- 安全研究:可能会发现其他能够执行代码的 Git 配置键,从而将检查清单扩展到上述五个之外。
底线是:AI 助手可以是一个方便的结对编程伙伴,但它也会乐于运行隐藏在仓库 Git 配置中的任何命令。在让助手接触工作区之前,请务必进行验证。
