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 通常运行的沙箱环境。在实践中,一个受损的仓库可以安装恶意软件、窃取凭据或篡改源文件,而此时开发者还以为助手仅仅是在提供建议。

攻击是如何展开的

  1. 准备阶段 – 攻击者创建一个仓库,其 .git/config 包含类似 core.fsmonitor = /path/to/malicious/script 的行。
  2. 交付阶段 – 仓库以 zip 文件形式交付、从 USB 闪存盘复制、通过共享驱动器同步,或者以其他方式放置在受害者的机器上,且其中已包含 .git 文件夹。
  3. 触发阶段 – 开发者在支持 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 可执行的风险键hooksPathsshCommandpagereditorfilter。使用相同的 git config --get 模式来验证它们是否为空。

  • 对于任何打算提供给 AI 工具的代码,优先使用干净的 clone。如果必须处理 zip 文件或传输的文件夹,请删除其 .git 目录并重新初始化仓库,或者先运行上述检查。

责任归属

该漏洞并非 Claude Code、Cursor 或 Grok Build 所驱动的语言模型的缺陷;它是这些工具获取文件信息方式所导致的结果。一些厂商已开始更严格地对 Git 调用进行沙箱化处理,但默认行为仍然信任本地仓库设置。在行业采用一种标准(即在 AI agent 扫描工作区时剥离或忽略潜在危险的配置项)之前,开发者必须作为最后一道防线。

后续关注点

  • 工具更新:在调用 git status 之前明确对 Git 配置进行清理。
  • 社区驱动的指南:关于安全 AI 辅助开发的指南,可能包括推荐的预检步骤。
  • 安全研究:可能会发现其他能够执行代码的 Git 配置键,从而将检查清单扩展到上述五个之外。

底线是:AI 助手可以是一个方便的结对编程伙伴,但它也会乐于运行隐藏在仓库 Git 配置中的任何命令。在让助手接触工作区之前,请务必进行验证。