Cайт программиста Ruby, веб-разработчика Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Zero-click RCE сразу в четырёх крупнейших ИИ-агентах Claude Code, Codex, Copilot и Gemini

Одна ошибка в механизме обновления расширений оказалась общей сразу для Claude Code, OpenAI Codex, GitHub Copilot и Gemini CLI. Специалисты AIR Security обнаружили Plugin4Shell, уязвимость цепочки поставок, которая позволяет незаметно заменить проверенный плагин вредоносным и получить удалённое выполнение кода (RCE) на компьютере разработчика без единого клика. AIR оценивает потенциальный охват проблемы в миллионы установок ИИ-агентов.

В основе защиты подобных расширений лежит SHA pinning. Каталог проверяет код и закрепляет плагин за конкретным Git-коммитом, поэтому последующие изменения репозитория не должны влиять на уже одобренную версию. Plugin4Shell ломает именно эту гарантию. ИИ-агент запрашивает нужный коммит, но после checkout не проверяет, какой код в действительности оказался в рабочем каталоге. Для современных инструментов агентной разработки подобная ошибка особенно опасна, поскольку расширения получают доступ к файлам, терминалу, внутренним сервисам и другим ресурсам пользователя.

В Claude Code, Codex и GitHub Copilot атакующий может создать ветку, имя которой полностью совпадает с закреплённым 40-символьным SHA. Git разрешает такие имена и при неоднозначности предпочитает ссылку на ветку объекту-коммиту. В результате команда checkout принимает строку за имя ветки и загружает уже вредоносную версию. Подмена особенно опасна на фоне распространения заражённых плагинов и навыков для ИИ-агентов.

Нулевой клик появляется благодаря автоматическим обновлениям. Claude Code и Codex по умолчанию могут обновлять установленные дополнения в фоне. Злоумышленнику не требуется убеждать жертву поставить новый модуль или подтвердить запуск команды. Достаточно получить контроль над репозиторием уже установленного расширения либо заранее опубликовать безопасный плагин, дождаться распространения и позже заменить код. Схожие проблемы доверия между ИИ-агентами и подключаемыми инструментами уже проявлялись при анализе токсичных потоков в экосистеме MCP.

У Gemini CLI механизм немного отличается. Клиент получает закреплённый коммит через git fetch, а затем выполняет git checkout FETCH_HEAD. AIR показала, что ветка с именем FETCH_HEAD способна перехватить разрешение имени и снова заставить агент использовать чужой код. Для трёх других продуктов нужен хостинг, разрешающий ветки с именами в форме полного SHA. GitHub такие ветки запрещает, но Bitbucket и некоторые самостоятельно развёрнутые Git-серверы допускают.

Anthropic закрыла Plugin4Shell в Claude Code 2.1.179, а OpenAI исправила Codex в версии 0.146.0. По состоянию на 17 сентября AIR не получила подтверждения исправления GitHub Copilot. Исследователи также утверждают, что отдельного исправления Plugin4Shell для Gemini CLI не будет и рекомендуют переходить на Antigravity. Формулировка требует уточнения: Google сохранила поддержку Gemini CLI для корпоративных клиентов и пользователей платных API-ключей, хотя потребительские тарифы с июня переведены на Antigravity CLI.

Технический разбор Plugin4Shell AIR опубликовала 17 сентября после координированного раскрытия производителям. Компания рекомендует обновить Claude Code и Codex до исправленных версий. Одного контроля каталога расширений недостаточно, поскольку ошибка возникает непосредственно на стороне агента при разрешении Git-ссылки. Надёжное исправление должно после checkout сравнивать фактический HEAD с закреплённым SHA и отменять установку при несовпадении.

Похожая зависимость безопасности ИИ-помощника от поведения Git проявилась совсем недавно в GitSpawn. Там специально подготовленная конфигурация чужого проекта заставляла Claude Code и ряд других агентов запускать команды ещё до первого запроса пользователя.

Другой пример показала атака SymJack. Безобидное действие, которое пользователь соглашался разрешить ИИ-помощнику, позволяло через особенности файловой системы менять конфигурацию агента и добираться до SSH-ключей. Оба случая показывают одну проблему: доверенные служебные механизмы становятся частью поверхности атаки вместе с самой языковой моделью.

Риск не ограничивается заражёнными репозиториями. Ранее демонстрации атак на Claude Code, GitHub Copilot и другие инструменты показали, что иногда одной строки на веб-странице или в документе достаточно, чтобы ИИ-помощник получил вредоносную инструкцию. Plugin4Shell переносит ту же идею на уровень цепочки поставок, где опасный код может прийти через расширение, которое пользователь уже установил и считает проверенным.

SecurityLab