ИИ-ассистенты для написания кода могут быть скомпрометированы с помощью вредоносной записи в .git/config, которая эксплуатирует функцию Git core.fsmonitor. Это позволяет недоверенному репозиторию запускать команды на машине разработчика в тот самый момент, когда ассистент начинает сканировать файлы.
Уязвимость обнаружилась в нескольких популярных агентах: Claude Code, Cursor, OpenAI Codex, Goose, Qwen Code, Grok Build и Hermes. В исправленных агентах эксплойт больше не работает; остальные остаются уязвимыми. При этом не требуется никаких дополнительных кликов или подтверждений, а вредоносный код запускается с привилегиями самого пользователя, вне любой «песочницы», которую может предоставлять ИИ-агент.
Как атака достигает разработчика
- Подрядчик архивирует проект и отправляет его по электронной почте.
- Коллега делится папкой на сетевом диске.
- Передача USB-накопителя с кодовой базой.
В каждом из этих случаев репозиторий поступает в виде директории, которая уже содержит папку .git. Когда ИИ-ассистент открывает папку, он обычно запускает git status в фоновом режиме, чтобы построить представление кода. Git ускоряет эту операцию с помощью настройки core.fsmonitor, которая указывает Git вызывать внешнюю программу для отслеживания изменений в файловой системе. Если файл .git/config репозитория определяет вредоносную команду для core.fsmonitor, Git выполнит её автоматически, не запрашивая разрешения у пользователя.
Поскольку команда запускается самим Git, она наследует права пользователя и обходит любую песочницу, которую мог настроить ИИ-инструмент. Эксплойт не срабатывает во время обычных команд git clone, git fetch или git pull; он активируется только тогда, когда репозиторий распаковывается с уже имеющимися метаданными .git.
Почему это важно
Разработчики всё чаще полагаются на ИИ-ассистентов для автодополнения кода, рефакторинга или генерации целых модулей. Этим инструментам требуется быстрый снимок дерева файлов проекта, поэтому они незаметно вызывают команды Git. Если вредоносный репозиторий может выполнить код в этот момент, злоумышленник получает точку закрепления на рабочей станции разработчика без каких-либо видимых предупреждений. Потенциальная нагрузка варьируется от кражи учетных данных до установки устойчивых бэкдоров — и всё это происходит в то время, когда пользователь уверен, что он просто «проверяет» код с помощью ИИ-помощника.
Как обнаружить зараженный репозиторий
Прежде чем передавать репозиторий ассистенту, выполните:
git config --get core.fsmonitor
Непустой вывод означает, что программа настроена на автоматический запуск. Для более широкой проверки выведите список подозрительных настроек Git:
git config --local --list | grep -Ei 'fsmonitor|hooksPath|sshCommand|pager|editor|filter\.'
Если вы обнаружите записи, которые не добавляли, удалите их с помощью:
git config --local --unset core.fsmonitor
Обратите внимание, что установка git config --global core.fsmonitor false не защитит вас. Локальные настройки репозитория всегда имеют приоритет над глобальными, поэтому вредоносный репозиторий может просто проигнорировать глобальное правило.
Текущая ситуация с исправлениями
- Claude Code — исправлено (fsmonitor)
- Cursor — исправлено
- OpenAI Codex — исправлено
- Goose — исправлено
- Qwen Code — не исправлено
- Grok Build — не исправлено
- Hermes — не исправлено
Разработчикам, использующим неисправленные агенты, следует рассматривать любой входящий репозиторий как потенциально опасный, пока они не сменят инструменты или не введут более строгие локальные политики Git.
Контраргумент сообщества Git
core.fsmonitor в Git — это легитимная функция повышения производительности, а не ошибка. Разработчики Git утверждают, что ответственность лежит на вызывающей стороне: необходимо проверять содержимое репозитория перед вызовом команд Git. Глобальное отключение этой функции является простым способом смягчения последствий, но, как было отмечено, локальные переопределения могут обойти эту защиту. Широкая дискуссия сейчас сосредоточена на том, должны ли ИИ-ассистенты изолировать в песочнице все внешние вызовы Git или отказываться обрабатывать репозитории, содержащие пользовательские хуки fsmonitor.
На что обратить внимание в дальнейшем
- Обновления от неисправленных ИИ-агентов — особенно любые заявления об изоляции (sandboxing) вызовов Git.
- Возможные изменения в поведении Git по умолчанию при работе с
core.fsmonitorдля недоверенных директорий. - Сторонние инструменты, которые могут очистить
.git/configрепозитория перед тем, как он попадет к ассистенту.
Вывод
Одна строка в скрытом конфигурационном файле может превратить удобство ИИ в вектор удаленного выполнения кода. Пока уязвимые агенты не будут исправлены, самой безопасной практикой является аудит каждого репозитория, полученного вне стандартного процесса клонирования, и удаление любых хуков core.fsmonitor или аналогичных перед тем, как позволить ИИ-ассистенту работать с кодом.
