Manifold Security обнаружила восемь уязвимостей в семи консольных ИИ-агентах для программирования: goose, Claude Code, Cursor CLI, OpenAI Codex, Hermes Agent, Qwen Code и Grok Build. Исследование получило название GitSpawn; пять находок были подробно опубликованы, причем тот же шаблон Manifold встретила и в других, не названных продуктах. Подготовленный злоумышленником файл .git/config способен заставить агента запустить команду с правами текущего пользователя, вне песочницы и без запроса на подтверждение. Иногда это происходит еще до принятия доверия к рабочей области, аутентификации, отправки первого запроса или обращения к модели. После повторной проверки 1 сентября неисправленными оставались Hermes Agent, Qwen Code, Grok Build и второй путь в Claude Code, вызываемый командой claude ultrareview.
Для атаки репозиторий должен попасть к разработчику вместе с каталогом .git. Подходят архив, общий диск, синхронизируемая папка или USB-накопитель. Обычное клонирование через Git, как правило, не переносит локальный .git/config исходного репозитория в нужном злоумышленнику виде, поэтому описанная техника при стандартном git clone обычно не срабатывает. Ни один из приведенных источников не сообщал о реальном использовании этих конкретных уязвимостей в атаках.
Основным пусковым механизмом стал core.fsmonitor, штатная настройка Git для ускорения проверки изменений. Ее значением может быть команда, которую Git выполняет при обновлении индекса, например во время git status или git diff. Агенты постоянно вызывают такие операции в фоне, выясняя активную ветку, список измененных файлов и состояние проекта, но уязвимые реализации не отключали настройки из репозиторного .git/config. Manifold описала причину так: «Уязвимость находится не в модели и не в чем-то новом. Она скрыта в обычной внутренней механике, в подпроцессе, который агент запускает при начале сеанса, чтобы выяснить, где он находится». Cobalt в декабрьском отчете красной команды сформулировала проблему схожим образом: «Злоупотребление FSMonitor использует законную функцию, а не ошибку. Оно задействует пересечение гибкости Git и автоматизации современных IDE, превращая открытие репозитория в выполнение кода».
Защитные экраны часто появлялись слишком поздно. В Claude Code и Hermes Agent команда могла выполниться до принятия запроса о доверии рабочей области, в Qwen Code до аутентификации пользователя, а в Grok Build после первого нажатия клавиши. В goose выполнение было возможно до отправки промпта, вызова модели, запроса разрешения на инструмент, появления окна доверия и вообще до связи goose с моделью. В Cursor CLI Manifold ранее нашла репозиторную команду настройки, исполнявшуюся до окна доверия и вне песочницы. Поэтому наличие такого окна само по себе ничего не гарантирует: Git уже мог запустить программу.
В goose проблема проявлялась при goose review. Агент добавлял к Git-вызову только параметр -c core.quotePath=off, оставляя остальные настройки репозитория активными. В рекомендации GitHub сказано: «Поэтому запуск goose review внутри вредоносного репозитория выполняет код атакующего: без отправленного запроса, без вызова модели, без разрешения на инструмент и без запроса доверия. Команда выполняется еще до того, как goose впервые свяжется с моделью». Уязвимость получила номер CVE-2026-72718; ее обнаружение приписано Francisco Rosales, номер назначил GitHub. Оценка CVSS 4.0 составила 7,0 балла, и это единственная находка в опубликованных данных, для которой приведен балл. Исправление вошло в версию 1.44.0. Строка о диапазоне уязвимых выпусков в исходных сведениях обрезана и сохранилась только как «44.0, исправлено в 1.44.0», поэтому точную нижнюю границу по ней установить нельзя.
OpenAI выпустила исправления и зарегистрировала три CVE одного класса, независимо найденные тремя не связанными друг с другом исследовательскими группами. В опубликованных данных назван только CVE-2026-19592; номера двух остальных не приведены. В записи OpenAI сказано: «Вспомогательный процесс выполняется вне командной песочницы Codex и без запроса подтверждения пользователя, позволяя контролируемому атакующим коду работать с правами пользователя. Код может читать, изменять или удалять файлы пользователя и обращаться к другим ресурсам, доступным его учетной записи». Codex CLI был уязвим в версиях 0.102.0–0.130.0 и исправлен в 0.131.0; на 2 сентября актуальным выпуском был 0.152.1, но установки, закрепленные ниже 0.131.0, оставались под угрозой. В Codex Desktop для macOS уязвимы версии 260202.0859–26.513.31313, исправление появилось в 26.519.22136. Для стандартного пакета Windows опасный диапазон составлял 26.304.38–26.513.40821, исправленная версия — 26.519.21041. В пакете Microsoft Store это соответственно 26.304.38.0–26.513.4821.0 и 26.519.2081.0.
В Claude Code обнаружились как минимум два пути выполнения. Основной вариант через core.fsmonitor Manifold подтвердила в версии 2.1.193, выпущенной 25 июня 2026 года, и сообщила о нем 26 июня. Отчет закрыли как дубликат заявки, поданной другим исследователем ранее в тот же день. Исправление вышло 29 июня в версии 2.1.196. Эта история оказалась повторной: Sonar сообщила о том же опасном механизме еще в апреле. По ее данным, «в версии 2.0.34 Claude был обновлен таким образом, что конкретная уязвимость смягчалась: git status больше не запускался до подтверждения диалога доверия. Тем не менее связанная проблема сохранилась». Версия 2.0.34 вышла 5 ноября 2025 года, но 25 июня 2026-го опасное стартовое поведение снова присутствовало в 2.1.193. В июньском бюллетене Anthropic по CVE-2026-55607 также упоминалось выполнение Git fsmonitor при операциях с рабочими деревьями.
Отдельная команда claude ultrareview активировала другой параметр Git. Manifold не раскрыла его название, пока уязвимость оставалась рабочей. Ее подтвердили 1 сентября в Claude Code 2.1.252; актуальной на тот момент была версия 2.1.258, однако опубликованные сведения не позволяют утверждать, что выпуски после 2.1.252 уже содержали исправление. Для июньского отчета Manifold о core.fsmonitor Anthropic не выпустила отдельного бюллетеня. The Hacker News 2 сентября проверила реестр уведомлений Anthropic для npm-пакета и установила, что там не описана ни одна из двух рассмотренных уязвимостей Claude Code.
Hermes Agent от Nous Research оставался уязвимым в версиях 0.18.2 и 0.21.0. Manifold шесть раз пыталась связаться с разработчиками по пяти каналам, но закрытая заявка так и числилась неразобранной. Риск здесь не совсем академический: в июле оператор оставил Hermes Agent работать без присмотра во время проникновения в сеть государственного учреждения Таиланда, хотя сведений об использовании именно GitSpawn в том инциденте нет. По сообщению Manifold, VulnCheck присвоила проблеме номер CVE-2026-71963. Когда The Hacker News проверила список MITRE 2 сентября, записи с таким номером там не было, хотя соседние идентификаторы до и после него уже были опубликованы как записи VulnCheck.
Qwen Code от Alibaba был уязвим в версиях 0.19.6 и 0.22.3, причем команда могла стартовать еще до аутентификации. Центр реагирования Alibaba принял отчет 7 июля, но 2 сентября версия 0.22.3, повторно проверенная Manifold, по-прежнему оставалась последней в npm. В Grok Build от xAI проблему подтвердили в выпусках 0.2.93 и 1.0.13; полезная нагрузка запускалась при первом нажатии клавиши. xAI закрыла более ранний отчет об этом классе как «информационный» 1 июля, а заявку Manifold от 14 июля позднее отметила дубликатом. Сборка 0.2.93 фигурировала и в отдельном исследовании: Grok Build загружал целые Git-репозитории в хранилище xAI. Компания ответила публикацией в X, но формального бюллетеня не выпустила. Cursor CLI столкнулся с тем же классом ошибки тремя неделями ранее: заданная репозиторием команда настройки исполнялась до запроса доверия и за пределами песочницы; исправление для Cursor было выпущено.
Похожая ловушка существовала задолго до нынешних ИИ-агентов. Sonar связала обход доверия рабочей области с CVE-2021-43891 в Visual Studio Code до версии 1.63.1 и CVE-2022-24346 в IDE JetBrains до версии 2021.3.1. В обоих случаях выполнение команды происходило до либо около срабатывания защиты доверенной рабочей области. Пять отчетов Manifold оказались дубликатами независимых находок других специалистов, один был подан в тот же день; три CVE OpenAI тоже пришли от трех разных групп. На 2 сентября ни одна из обсуждаемых CVE не находилась в каталоге известных эксплуатируемых уязвимостей CISA версии 2026.09.01, содержавшем 1687 записей. Это говорит лишь об отсутствии этих номеров в каталоге на дату проверки, а не о невозможности атак.
Полученный архив, каталог с общего диска, синхронизируемую папку или репозиторий с флешки стоит проверять до запуска агента. В .git/config подозрения должны вызывать core.fsmonitor, core.hooksPath, attr.tree, clean-фильтры и process-фильтры. Значение FSMonitor внутри проекта показывает команда git config --get core.fsmonitor, глобальные настройки можно просмотреть через git config --global --list | grep fsmonitor. Отключение по умолчанию задается командой git config --global core.fsmonitor false. Разработчикам агентов следует удалять опасные репозиторные параметры или переопределять их в каждом фоновом вызове, например: git -c core.fsmonitor=false status. Исправления уже были выпущены для goose, Cursor, продуктов OpenAI Codex и основного пути core.fsmonitor в Claude Code; установленные версии все равно нужно сверять с указанными безопасными выпусками.
Для атаки репозиторий должен попасть к разработчику вместе с каталогом .git. Подходят архив, общий диск, синхронизируемая папка или USB-накопитель. Обычное клонирование через Git, как правило, не переносит локальный .git/config исходного репозитория в нужном злоумышленнику виде, поэтому описанная техника при стандартном git clone обычно не срабатывает. Ни один из приведенных источников не сообщал о реальном использовании этих конкретных уязвимостей в атаках.
Основным пусковым механизмом стал core.fsmonitor, штатная настройка Git для ускорения проверки изменений. Ее значением может быть команда, которую Git выполняет при обновлении индекса, например во время git status или git diff. Агенты постоянно вызывают такие операции в фоне, выясняя активную ветку, список измененных файлов и состояние проекта, но уязвимые реализации не отключали настройки из репозиторного .git/config. Manifold описала причину так: «Уязвимость находится не в модели и не в чем-то новом. Она скрыта в обычной внутренней механике, в подпроцессе, который агент запускает при начале сеанса, чтобы выяснить, где он находится». Cobalt в декабрьском отчете красной команды сформулировала проблему схожим образом: «Злоупотребление FSMonitor использует законную функцию, а не ошибку. Оно задействует пересечение гибкости Git и автоматизации современных IDE, превращая открытие репозитория в выполнение кода».
Защитные экраны часто появлялись слишком поздно. В Claude Code и Hermes Agent команда могла выполниться до принятия запроса о доверии рабочей области, в Qwen Code до аутентификации пользователя, а в Grok Build после первого нажатия клавиши. В goose выполнение было возможно до отправки промпта, вызова модели, запроса разрешения на инструмент, появления окна доверия и вообще до связи goose с моделью. В Cursor CLI Manifold ранее нашла репозиторную команду настройки, исполнявшуюся до окна доверия и вне песочницы. Поэтому наличие такого окна само по себе ничего не гарантирует: Git уже мог запустить программу.
В goose проблема проявлялась при goose review. Агент добавлял к Git-вызову только параметр -c core.quotePath=off, оставляя остальные настройки репозитория активными. В рекомендации GitHub сказано: «Поэтому запуск goose review внутри вредоносного репозитория выполняет код атакующего: без отправленного запроса, без вызова модели, без разрешения на инструмент и без запроса доверия. Команда выполняется еще до того, как goose впервые свяжется с моделью». Уязвимость получила номер CVE-2026-72718; ее обнаружение приписано Francisco Rosales, номер назначил GitHub. Оценка CVSS 4.0 составила 7,0 балла, и это единственная находка в опубликованных данных, для которой приведен балл. Исправление вошло в версию 1.44.0. Строка о диапазоне уязвимых выпусков в исходных сведениях обрезана и сохранилась только как «44.0, исправлено в 1.44.0», поэтому точную нижнюю границу по ней установить нельзя.
OpenAI выпустила исправления и зарегистрировала три CVE одного класса, независимо найденные тремя не связанными друг с другом исследовательскими группами. В опубликованных данных назван только CVE-2026-19592; номера двух остальных не приведены. В записи OpenAI сказано: «Вспомогательный процесс выполняется вне командной песочницы Codex и без запроса подтверждения пользователя, позволяя контролируемому атакующим коду работать с правами пользователя. Код может читать, изменять или удалять файлы пользователя и обращаться к другим ресурсам, доступным его учетной записи». Codex CLI был уязвим в версиях 0.102.0–0.130.0 и исправлен в 0.131.0; на 2 сентября актуальным выпуском был 0.152.1, но установки, закрепленные ниже 0.131.0, оставались под угрозой. В Codex Desktop для macOS уязвимы версии 260202.0859–26.513.31313, исправление появилось в 26.519.22136. Для стандартного пакета Windows опасный диапазон составлял 26.304.38–26.513.40821, исправленная версия — 26.519.21041. В пакете Microsoft Store это соответственно 26.304.38.0–26.513.4821.0 и 26.519.2081.0.
В Claude Code обнаружились как минимум два пути выполнения. Основной вариант через core.fsmonitor Manifold подтвердила в версии 2.1.193, выпущенной 25 июня 2026 года, и сообщила о нем 26 июня. Отчет закрыли как дубликат заявки, поданной другим исследователем ранее в тот же день. Исправление вышло 29 июня в версии 2.1.196. Эта история оказалась повторной: Sonar сообщила о том же опасном механизме еще в апреле. По ее данным, «в версии 2.0.34 Claude был обновлен таким образом, что конкретная уязвимость смягчалась: git status больше не запускался до подтверждения диалога доверия. Тем не менее связанная проблема сохранилась». Версия 2.0.34 вышла 5 ноября 2025 года, но 25 июня 2026-го опасное стартовое поведение снова присутствовало в 2.1.193. В июньском бюллетене Anthropic по CVE-2026-55607 также упоминалось выполнение Git fsmonitor при операциях с рабочими деревьями.
Отдельная команда claude ultrareview активировала другой параметр Git. Manifold не раскрыла его название, пока уязвимость оставалась рабочей. Ее подтвердили 1 сентября в Claude Code 2.1.252; актуальной на тот момент была версия 2.1.258, однако опубликованные сведения не позволяют утверждать, что выпуски после 2.1.252 уже содержали исправление. Для июньского отчета Manifold о core.fsmonitor Anthropic не выпустила отдельного бюллетеня. The Hacker News 2 сентября проверила реестр уведомлений Anthropic для npm-пакета и установила, что там не описана ни одна из двух рассмотренных уязвимостей Claude Code.
Hermes Agent от Nous Research оставался уязвимым в версиях 0.18.2 и 0.21.0. Manifold шесть раз пыталась связаться с разработчиками по пяти каналам, но закрытая заявка так и числилась неразобранной. Риск здесь не совсем академический: в июле оператор оставил Hermes Agent работать без присмотра во время проникновения в сеть государственного учреждения Таиланда, хотя сведений об использовании именно GitSpawn в том инциденте нет. По сообщению Manifold, VulnCheck присвоила проблеме номер CVE-2026-71963. Когда The Hacker News проверила список MITRE 2 сентября, записи с таким номером там не было, хотя соседние идентификаторы до и после него уже были опубликованы как записи VulnCheck.
Qwen Code от Alibaba был уязвим в версиях 0.19.6 и 0.22.3, причем команда могла стартовать еще до аутентификации. Центр реагирования Alibaba принял отчет 7 июля, но 2 сентября версия 0.22.3, повторно проверенная Manifold, по-прежнему оставалась последней в npm. В Grok Build от xAI проблему подтвердили в выпусках 0.2.93 и 1.0.13; полезная нагрузка запускалась при первом нажатии клавиши. xAI закрыла более ранний отчет об этом классе как «информационный» 1 июля, а заявку Manifold от 14 июля позднее отметила дубликатом. Сборка 0.2.93 фигурировала и в отдельном исследовании: Grok Build загружал целые Git-репозитории в хранилище xAI. Компания ответила публикацией в X, но формального бюллетеня не выпустила. Cursor CLI столкнулся с тем же классом ошибки тремя неделями ранее: заданная репозиторием команда настройки исполнялась до запроса доверия и за пределами песочницы; исправление для Cursor было выпущено.
Похожая ловушка существовала задолго до нынешних ИИ-агентов. Sonar связала обход доверия рабочей области с CVE-2021-43891 в Visual Studio Code до версии 1.63.1 и CVE-2022-24346 в IDE JetBrains до версии 2021.3.1. В обоих случаях выполнение команды происходило до либо около срабатывания защиты доверенной рабочей области. Пять отчетов Manifold оказались дубликатами независимых находок других специалистов, один был подан в тот же день; три CVE OpenAI тоже пришли от трех разных групп. На 2 сентября ни одна из обсуждаемых CVE не находилась в каталоге известных эксплуатируемых уязвимостей CISA версии 2026.09.01, содержавшем 1687 записей. Это говорит лишь об отсутствии этих номеров в каталоге на дату проверки, а не о невозможности атак.
Полученный архив, каталог с общего диска, синхронизируемую папку или репозиторий с флешки стоит проверять до запуска агента. В .git/config подозрения должны вызывать core.fsmonitor, core.hooksPath, attr.tree, clean-фильтры и process-фильтры. Значение FSMonitor внутри проекта показывает команда git config --get core.fsmonitor, глобальные настройки можно просмотреть через git config --global --list | grep fsmonitor. Отключение по умолчанию задается командой git config --global core.fsmonitor false. Разработчикам агентов следует удалять опасные репозиторные параметры или переопределять их в каждом фоновом вызове, например: git -c core.fsmonitor=false status. Исправления уже были выпущены для goose, Cursor, продуктов OpenAI Codex и основного пути core.fsmonitor в Claude Code; установленные версии все равно нужно сверять с указанными безопасными выпусками.