Загрузил PNG с котиком, потерял все пароли проекта. GhostCommit – новый способ обмануть ИИ

3426
Загрузил PNG с котиком, потерял все пароли проекта. GhostCommit – новый способ обмануть ИИ

Почему обычные сканеры утечек не замечают такую кражу данных.

image

Вредоносный запрос на изменение кода может пройти проверку без единого замечания, а спустя несколько дней заставить ИИ-помощника незаметно вынести секреты проекта. Для атаки достаточно спрятать инструкцию внутри обычного PNG-файла, который системы проверки кода даже не открывают.

Специалисты группы ASSET при Университете Миссури в Канзас-Сити назвали такой способ GhostCommit. Они опубликовали рабочий пример атаки и заранее уведомили разработчиков затронутых инструментов.

Атака проходит в два этапа. Сначала злоумышленник отправляет запрос на изменение репозитория и добавляет файл AGENTS.md с правилами для ИИ-помощников. Сам файл выглядит безобидно и лишь ссылается на изображение docs/images/build-spec[.]png. Внутри картинки и содержится скрытая инструкция.

Системы CodeRabbit и Bugbot не нашли проблему. CodeRabbit по умолчанию исключает изображения из проверки, поэтому PNG воспринимается как обычный двоичный файл. Даже надписи «malicious prompt injection» и прямое требование прочитать .env не вызвали предупреждения.

После того как изменения сливаются в проект, вредоносная инструкция остаётся в коде и ждёт подходящего момента. Когда разработчик просит ИИ-помощника создать обычный модуль, агент читает AGENTS.md, открывает картинку и выполняет спрятанные команды. В одном из испытаний Cursor с Claude Sonnet записал содержимое .env в виде 311 целых чисел. После обратного преобразования последовательность полностью совпала с исходным файлом.

Разработчик видит запрошенную функцию и может отправить код в общий репозиторий. Злоумышленнику остаётся скачать открытую версию файла и преобразовать числа обратно в текст. Обычные средства поиска утечек не замечают проблему, поскольку не считают кортеж или список чисел учётными данными.

Авторы GhostCommit также проверили, насколько результат зависит от выбранной модели. Cursor и Antigravity раскрывали содержимое .env при работе с Sonnet, Gemini и GPT-5.5. Claude Code с теми же моделями отказывался выполнять команду. В одном случае Opus сначала записал секрет, затем распознал обман и удалил данные. Результат сильнее зависел от среды запуска агента, чем от самой языковой модели.

Проблему усиливает слабая проверка изменений в популярных проектах. Изучив 6480 запросов на изменение в 300 активных открытых репозиториях, специалисты установили, что 73% принятых изменений попали в основную ветку без содержательной проверки со стороны человека или автоматической системы.

Чтобы защититься, специалисты создали мультимодальный модуль проверки для GitHub, который анализирует не только текст и код, но и изображения. При тестировании на 80 ранее неизвестных запросах он пропустил одну атаку, обнаружил все варианты, скрывающие инструкции в картинках, и не выдал ложных предупреждений по 30 безопасным изменениям. Дополнительно защитить систему может контроль над действиями ИИ-агента, в том числе над попытками спрятать инструкцию и открыть файлы с учётными данными без явной причины.