Чем больше кода пишут и проверяют ИИ-агенты, тем интереснее их атаковать. Новая техника Ghostcommit бьёт именно по этому стыку: она прячет вредоносные инструкции внутри картинки, чтобы обойти ИИ-ревьюеров и заставить кодового агента слить секреты — например, содержимое файла .env. Атаку продемонстрировала исследовательская группа ASSET.
В чём хитрость
Ghostcommit эксплуатирует «слепое пятно» мультимодальных моделей, разнося нагрузку по двум каналам.
- Текстовый слой. Безобидный на вид файл-соглашение
AGENTS.mdпросит агента взять некую «сборочную константу» из указанной картинки. - Слой картинки. Сам эксплойт — команда читать
.envпобайтово и кодировать в ASCII-числа — зашит текстом прямо внутри PNG.
Почему это проходит мимо защиты: текстовые ревьюеры воспринимают изображение как непрозрачный двоичный объект, у популярного CodeRabbit PNG-файлы по умолчанию вообще исключены из проверки, а сканеры секретов ищут строковые шаблоны, а не последовательности чисел.
Как разворачивается атака
- Pull request. Атакующий присылает запрос с
AGENTS.mdи вредоносным PNG, спрятанным вdocs/images/build-spec.png. - Обход ревью. ИИ-ревьюеры вроде Cursor Bugbot помечают явную текстовую нагрузку как критичную, но инструкции внутри картинки не видят. PR проходит «чистым».
- Срабатывание. Позже разработчик в отдельной сессии просит агента о совершенно другой доработке. Агент читает уже влитый
AGENTS.md, идёт по ссылке на картинку и выполняет спрятанную команду. - Утечка. Агент читает
.envи выводит его как константу уровня модуля — сотни чисел, кодирующих секреты. В одном из тестов это был кортеж из 311 чисел с API-ключами, адресами баз данных и облачными кредами. - Расшифровка. Атакующему остаётся прочитать публичный коммит и перевести числа обратно в текст.
Кто уязвим, а кто устоял
Результат сильно зависел не столько от самой модели, сколько от «обвязки» вокруг неё. Поддались Cursor (с Claude Sonnet, Composer-2, GPT-5.5) и Antigravity (с Sonnet, Gemini 3.1 Pro, Gemini 3 Flash). Устоял Claude Code — отказался выполнять команду на всех проверенных моделях (Sonnet 4.6, Haiku 4.5, Opus 4.7). Любопытен пограничный случай: Opus под Antigravity сначала вычислил и записал секрет, но затем распознал схему социальной инженерии и удалил его до завершения.
Как защищаться
Исследователи собрали прототип мультимодального ревью-приложения для GitHub на базе Gemma 4, работающего на одной видеокарте с 4 ГБ памяти. Он совмещает поиск невидимых символов, анализ «формы» кода и проходы модели и по тексту соглашений, и по встроенным изображениям.
Результаты обнадёживают: на стресс-тесте из пятнадцати классов атак прототип поймал все вредоносные PR без единого ложного срабатывания, а на восьмидесяти незнакомых реальных запросах распознал 49 атак из 50. Код доказательства концепции выложен в открытый доступ — чтобы защитники могли им пользоваться.