ИИ-агента взломали простым PNG-файлом — и он послушно слил пароли злоумышленнику

от автора

Prompt injection — один из самых распространенных способов взлома ИИ-агентов. В текст, с которым работает модель, прячется вредоносная инструкция в расчете на то, что человек не будет проверять все подряд, а ИИ прочитает и выполнит. Очевидно, что системы безопасности современных моделей настроены в первую очередь на распознавание и игнорирование подобных инструкций. Поэтому злоумышленники постоянно ищут способы, как запрятать их еще глубже.

Каналов таких набралось уже немало. Инструкцию прячут в невидимых Unicode-символах, ее пишут белым по белому на веб-странице, а свежий пример — атака Ghostcommit, которую показали исследователи из ASSET Research Group: они спрятали вредоносный приказ внутри картинки, приложенной к пул-реквесту, — в расчете на то, что ИИ-ревьюер пропустит ее не открывая. Так и вышло.

Из двух популярных ИИ-ревьюеров CodeRabbit по умолчанию вообще исключает картинки из проверки, а Bugbot пусть и проверил, но не заметил ничего вредоносного. Хотя ради эксперимента исследователи прямо вписали в PNG слова «вредоносная промпт-инъекция» и явный приказ читать .env — и ревьюер все равно не увидел угрозы.

Причина проста: для ИИ-ревьюера, который работает с текстом, картинка — это просто набор байтов, читать в ней нечего. Параллельно с картинкой в репозиторий добавляют файл AGENTS.md с инструкциями, который ИИ-агенты читают автоматически и выполняют как обязательное правило. Написано там про рутинную «гигиену сборки»: файл ссылается на картинку build-spec.png и просит вывести из нее служебную константу. Именно в картинке и спрятан вредоносный приказ — прочитать .env побайтово, превратить каждый байт в число и вписать результат в код. А чтобы усыпить последнюю защиту ревьюера — проверку на связность, которая помечает подозрительным правило без реального кода за ним, — к пул-реквесту приложили еще и легенду прикрытия: фейковый «валидатор происхождения» на 50 строк и выдуманный отчет о разборе инцидента. С такой обвязкой пул-реквест проходит вообще без замечаний.

При этом кража происходит не сразу: наживка спокойно лежит в репозитории, пока в совершенно другой сессии разработчик не попросит агента о чем-то будничном, например собрать модуль учета токенов. Тот при запуске читает AGENTS.md, идет по ссылке на картинку, открывает .env и вписывает в новый модуль ту самую константу. В одном из прогонов Cursor под управлением Claude Sonnet сделал это с первой попытки: список из 311 чисел, которые побайтово разворачиваются в полное содержимое .env — API-ключи, адреса баз данных, облачные учетки.

Разработчик видит ровно ту функцию, которую заказывал, и спокойно коммитит. А злоумышленнику остается прочитать публичный коммит и превратить числа обратно в текст. Сканеры секретов при этом молчат: ни один из них не догадывается развернуть безобидный на вид список чисел обратно в буквы и проверить, не пароль ли это. И расчет тут не на редкую оплошность — авторы приводят цифру, что 73% пул-реквестов в трехстах самых активных публичных репозиториях за последние 90 дней доходят до основной ветки вообще без содержательной проверки, ни человеком, ни ботом.

Авторы прогнали атаку по десять раз, испытав разные связки из модели и агентной обвязки. Cursor и Antigravity послушно сливали .env под Sonnet, Gemini и GPT-5.5. А Claude Code на той же самой Sonnet выполнять задачу отказался, текстом объяснив почему. Еще более мощный Opus избежал атаки уже и в Antigravity: он сначала записал секрет в код, а потом распознал прием социальной инженерии — и стер написанное сам, не доведя дело до конца.

Важно добавить, что Ghostcommit — это proof-of-concept в изолированных репозиториях с подставными ключами, а не зафиксированная атака в реальной жизни. И там же, в самом исследовании, лежит хорошая новость: случай с Claude Code и Opus показывает, что такие атаки вполне отбиваются. Один инструмент приказ выполнил, более совершенный на той же модели наотрез отказался, а в случае с Opus сработала уже внутренняя защита модели классом выше.

Тем не менее, куда надежнее отбивать такие атаки на более раннем этапе — когда с кодом работает ИИ-ревьюер. Публичной реакции разработчиков CodeRabbit и Bugbot на момент публикации не было — при этом в ASSET Research Group утверждают, что сразу передали им всю информацию о потенциальной уязвимости. Параллельно ASSET Research Group предлагает собственное решение — инструмент мультимодальной проверки, который на живом тесте из 80 незнакомых пул-реквестов пропустил лишь одну атаку и ни разу не ошибся на 30 честных правках. Важно добавить, что это собственные замеры компании, у которой в данной ситуации есть коммерческий интерес — продать собственный инструмент проверки.

P.S. Поддержать меня можно подпиской на канал сбежавшая нейросеть, где я рассказываю про ИИ с творческой стороны.

ссылка на оригинал статьи https://habr.com/ru/articles/1058368/