Исследователи из Air Security в четверг опубликовали уязвимость, которую называют Plugin4Shell. Она затрагивает четыре самых распространённых AI-агента для работы с кодом: Claude Code от Anthropic, Codex от OpenAI, GitHub Copilot и Gemini CLI от Google. Авторы работы — Or Nevo, Dor Granat и Niv Hoffman — описывают её как zero-click remote code execution: от жертвы не требуется никаких действий. Практическое следствие в том, что плагин, которому разработчик уже доверяет, может быть подменён кодом атакующего во время обычного фонового обновления.

Уязвимость Plugin4Shell затронула четыре AI-агента для кода, исправления вышли только у двух

Что обходит атака

Маркетплейсы устанавливают дополнения для агентов, привязывая каждый плагин к хешу коммита — строке из 40 символов, которая обозначает один конкретный снимок кода. Снимок проверяют один раз, закрепляют, и агент должен запускать именно этот проверенный код. Air выяснила, что агенты запрашивают закреплённый снимок, но не проверяют, что получили. Git позволяет ветке носить почти любое имя, включая строку, идентичную хешу коммита, а когда имя одновременно является и допустимой веткой, и допустимым объектом, git молча предпочитает ветку. Поэтому тот, кто контролирует репозиторий плагина, может создать ветку с именем закреплённого хеша, направить её на другой код и сделать веткой по умолчанию. Агент переключается на неё, устанавливает код атакующего и отчитывается об установке закреплённого коммита.

Gemini CLI ломается иначе. Он забирает правильный коммит, а затем выполняет checkout, который может перехватить ветка по умолчанию с именем FETCH_HEAD, и правильный код на диск не попадает. Исправление состоит из одной строки: после checkout определить, что реально лежит в рабочем дереве, и прервать работу, если это не совпадает с закреплением. Anthropic выпустила исправление в Claude Code 2.1.179, OpenAI — в Codex 0.146.0. Microsoft исправление для Copilot не выпустила, а Google не станет править Gemini CLI, потому что снимает продукт с поддержки. Air собрала рабочий proof of concept в мае и раскрыла данные всем четырём вендорам в июне; Anthropic подтвердила исправление 17 июня, Google 4 августа сообщила, что исправлений не будет, а Codex был проверен как исправленный 12 августа.

Атака не требует, чтобы кто-то устанавливал что-то новое. Агенты обновляют установленные плагины в фоне, причём Claude Code и Codex делают это по умолчанию, поэтому схема подменяет плагин, который разработчик уже запускает. Air описывает последовательность так: опубликовать действительно полезный плагин, пройти проверку, набрать пользователей, выпустить рутинное обновление, чтобы маркетплейс закрепил новый коммит, затем создать ветку с именем этого нового закрепления и наполнить её вредоносным кодом. Плагин выполняется с теми же правами, что и человек, использующий агента, поэтому подменённый код получает доступ к его файлам, сохранённым учётным данным и всем системам, куда он может войти. OWASP отметила ту же проблему в этом месяце, переместив excessive agency на третье место в своём топ-10 на 2026 год.

Что это значит для бизнеса

GitHub отклоняет имена веток, похожие на хеши коммитов, поэтому там трюк с веткой не работает, и представитель компании заявил The Register, что эта мера защиты не даёт эксплуатировать уязвимость на GitHub. Air не согласна: маркетплейсы могут размещаться на Bitbucket или на собственном git-сервере компании, а оба варианта допускают имена веток в виде хеша, и документация Anthropic перечисляет их как допустимые бэкенды маркетплейсов. Copilot тоже поддерживает такие хосты, и именно там, по мнению Air, находится риск. Microsoft не ответила The Register. Около 90% компаний из Fortune 500 используют Copilot, по собственным данным Microsoft, а Copilot — один из двух агентов без исправления.

На практике уязвимость уже, чем следует из числа четырёх агентов. Swati Khandelwal из The Hacker News 18 сентября проверила маркетплейсы, поставляемые вместе с агентами, и обнаружила, что каждый плагин в сообщественном каталоге Anthropic и в каталогах по умолчанию для Claude Code и Copilot указывает на репозиторий GitHub. Фоновое автообновление — та часть, которая делает атаку zero-click, — по умолчанию работает только для встроенных маркетплейсов агентов, а они живут на GitHub; для внешних маркетплейсов оно отключено или опционально. Разработчик, который ставит плагины только из каталогов по умолчанию, с версией через имя ветки не сталкивается. Это рассуждение не покрывает Gemini CLI: его вариант опирается на ветку с именем FETCH_HEAD, а не на хеш, и правило GitHub явно такое имя не блокирует; это единственный агент, который никто никогда не исправит.

По состоянию на 18 сентября The Hacker News не нашла ни идентификатора CVE, ни бюллетеня безопасности, опубликованного кем-либо из четырёх вендоров. В примечаниях к выпуску Anthropic 2.1.179 исправление не упоминается, поэтому публикация Air — единственное открытое свидетельство того, что оно существует, и признаков реального использования уязвимости нет. Четыре месяца молчания — большой срок для софта, который работает в Fortune 500, и это плохо сочетается с направлением европейских правил: Cyber Resilience Act устанавливает 24-часовой срок отчётности об активно эксплуатируемых уязвимостях и настойчиво требует документированных цепочек поставок ПО. Air работает по этому шву не первый месяц: она внедрила вредоносный skill в маркетплейс и добралась примерно до 26 000 агентов, а затем захватила 925 уже используемых skills, затронув 134 000 агентов, через перехват репозиториев за ними. Привязка по SHA была ответом отрасли на оба случая, и в августе пять лабораторий согласовали общий стандарт плагинов. Одна и та же ошибка проектирования проявилась в четырёх продуктах четырёх разных компаний, что указывает на непроверенное допущение, а не на оплошность одной команды.

Опубликованные материалы не дают ответа на один вопрос: удаляет ли обновление затронутого агента уже подменённый плагин или только останавливает следующую подмену. Этот вопрос стоит задать вендору напрямую — вместе с вопросом о том, где размещён маркетплейс и включено ли автообновление для всего, что находится за пределами встроенного каталога. Признак, за которым нужно следить, — идентификатор CVE или бюллетень безопасности вендора по Plugin4Shell: если он появится, уязвимость перейдёт из разряда исследовательских находок в документированный риск цепочки поставок, с которым придётся считаться закупкам и службам безопасности. Google направляет пользователей Gemini CLI в Antigravity, до которого атака не достаёт, потому что там нет привязки плагинов, которую можно обойти; сколько установок Gemini CLI останется через год, покажет, насколько быстро эта миграция происходит в действительности.