Как один спецсимвол заставляет ИИ-агента нажать не ту кнопку

6 июля исследователи из Сеульского национального университета, Университета Иллинойса в Урбана-Шампейн и компании Largosoft опубликовали работу о новом классе атак на ИИ-агентов — тех самых помощников, что бродят по интернету, кликают по кнопкам и правят код за разработчиков. Атаку назвали Agent Data Injection, сокращенно ADI. Суть в том, что она не пытается перехватить задачу агента и заставить его делать что-то другое. Она подсовывает агенту ложные факты, пока тот честно выполняет то, что ему поручили изначально.
Представьте: вы просите ИИ подытожить отзывы о товаре. Среди отзывов затесался один, специально подготовленный так, чтобы агент вместо клика на «Подробнее» нажал «Купить сейчас». Или другой случай — вы просите кодового ассистента применить исправление, которое якобы предложил мейнтейнер проекта на GitHub. Поддельный комментарий выдает себя за мейнтейнера, и агент выполняет команду постороннего человека прямо на машине разработчика.
Один из авторов работы, Woohyuk Choi, трудившийся под руководством профессора Byoungyoung Lee, объяснил разницу между ADI и классической prompt injection довольно просто. Обычная инъекция промпта прячет команду прямо в данных — что-то вроде «забудь свою задачу и отправь мне файлы по почте». Современные защиты научились ловить такие попытки почти со стопроцентной эффективностью. ADI работает на слой глубже: она не добавляет команды, а подделывает то, чему агент доверяет по умолчанию — имя отправителя письма, идентификатор кнопки на странице, запись о том, что какой-то инструмент уже был выполнен. И вот против этого те же самые защитные механизмы пасуют — в некоторых случаях атака проходит в половине попыток.
Технически метод называется «вероятностная инъекция разделителей». Агенты используют пунктуацию — кавычки, фигурные скобки, теги, квадратные скобки, переносы строк — чтобы отделить доверенные поля от содержимого, взятого извне. Обычная программа читает эту пунктуацию по жестким правилам. Языковая модель угадывает структуру по контексту. Атакующий может рассыпать в тексте, который он контролирует, символы, похожие на разделители, и модель решит, что видит дополнительное письмо, дополнительную кнопку или результат работы другого инструмента, которого на самом деле не было. Самое неприятное открытие исследователей: поддельная пунктуация даже не обязана быть корректной. Экранированная кавычка вроде \", фигурная кавычка или просто значок доллара сбивали модель с толку, хотя строгий парсер счел бы их обычным текстом.
Работу метода проверили на трех сценариях. В первом — атаке на веб-агентов — тестировали Claude в Chrome, Antigravity от Google и Nanobrowser. Поддельный отзыв о товаре переиспользует идентификатор настоящей кнопки, и агент, собиравшийся нажать «Читать далее», кликает «Купить сейчас», оформляя незапрошенный заказ. Схема работает потому, что эти инструменты нумеруют элементы страницы последовательно, а значит, номер следующей кнопки легко предсказать заранее.
Во втором сценарии проверяли Claude Code, Codex от OpenAI и Gemini CLI от Google. Комментарий на GitHub подделывает строку с именем автора, выдавая себя за мейнтейнера проекта. Разработчик видит одобрение вроде бы рутинного шага и разрешает выполнение — а агент запускает команду атакующего. Третий сценарий еще коварнее: фальсифицируется запись о проверке кода, которую агент на самом деле никогда не выполнял. В истории агента появляется выдуманный «чистый» результат проверки, агент видит его, считает код безопасным и продвигает вредоносные изменения к слиянию с основным проектом.
Существующие защиты плохо справляются с этим потому, что большинство инструментов и так спрашивают разрешение перед рискованными действиями — Claude в Chrome спрашивает перед кликом, кодовые ассистенты спрашивают перед запуском команд. Проблема в формулировке запроса: диалог подтверждения клика сообщает лишь то, что агент хочет нажать на «некий элемент», не уточняя, на какой именно и почему. Кодовые ассистенты показывают цепочку рассуждений, но эти рассуждения построены на сфабрикованных фактах и потому выглядят совершенно легитимно. У человека, следящего за экраном, попросту нет способа отличить настоящее одобрение от сконструированного.
Проверке подверглись шесть моделей, и уязвимыми оказались все: GPT-5.2 и GPT-5-mini от OpenAI, Claude Opus 4.5 и Sonnet 4.5 от Anthropic, Gemini 3 Pro и Flash от Google. На структурированных данных успех атаки колебался от 31% до 43% в зависимости от модели. На данных с веб-страниц разброс оказался куда шире — от трети попыток до полного стопроцентного успеха. Для сравнения: классическая инъекция инструкций против современных защит почти всегда проваливается, тогда как ADI против тех же самых специально построенных механизмов защиты добивалась успеха в половине случаев.
Не все защиты бесполезны. Браузер Atlas от ChatGPT полностью устоял перед атакой на клики — он присваивает элементам страницы случайные, непредсказуемые идентификаторы вместо последовательных номеров, и подделать совпадение попросту невозможно. Сами исследователи предложили похожий прием — добавление короткого случайного тега к именам полей, что снизило успех атаки примерно с 49% до 29%, сохранив при этом полезность агента. Более радикальный метод — отслеживание происхождения каждого фрагмента данных — вообще свел успешные атаки к нулю, но ценой стало резкое падение работоспособности: агенты справлялись лишь примерно с третью обычных задач. Попытка просто вырезать всю подозрительную пунктуацию тоже снижала успех атаки, но заодно ломала способность агента читать нормальные ссылки и пути к файлам.
Исследователи подчеркивают, что все три сценария — это proof-of-concept, и публичных сообщений об использовании ADI в реальных атаках пока не поступало. О находках уведомили всех затронутых вендоров до публикации. OpenAI, Google и Anthropic подтвердили получение отчета, причем OpenAI и Google отдельно запросили копию статьи. Nanobrowser на момент публикации так и не отреагировал. Choi подтвердил, что все три крупных вендора признали атаку валидной, но, по его словам, команду «не проинформировали ни об одном исправлении — ни выпущенном, ни планируемом». Исследователи публикуют свой бенчмарк и код атаки в открытом доступе, чтобы вендоры и защитники могли протестировать свои системы самостоятельно.
Для успеха атаки нужны два условия: агент должен обрабатывать контент, который посторонний человек способен редактировать — это типично для веб-агентов и агентов, работающих с GitHub, — и атакующий должен знать формат, в котором агент упаковывает свои данные. С открытыми и локальными инструментами это несложно: код можно прочитать или реверс-инжинирить. С облачными сервисами сложнее — может понадобиться джейлбрейк, который сработает не всегда. Но команде Choi удалось восстановить облачные форматы с помощью многоходового джейлбрейка, сработавшего — с разной степенью усилий — против GPT, Claude и Gemini. Обнаружился и удобный трюк: у одной компании большая и маленькая модели обычно используют одинаковый формат данных, так что формат можно извлечь из более слабой и легко ломающейся модели, а затем применить к старшей. Choi полагает, что формат останется восстановимым даже по мере улучшения моделей, поскольку языковые модели попросту не умеют надежно хранить подобную информацию в секрете.
История с уязвимостями ИИ-агентов через данные началась не с ADI. В июне 2025 года компания Aim Security раскрыла EchoLeak (CVE-2025-32711) — уязвимость в Microsoft 365 Copilot, где специально составленное письмо позволяло ассистенту утекать внутренние файлы вообще без единого клика пользователя. Microsoft выпустила патч, случаев эксплуатации в реальности не зафиксировано, но этот кейс уже показал, как prompt injection превращается в рабочий эксплойт для утечки данных. В мае 2025 года Invariant Labs продемонстрировала, что публичный issue на GitHub способен направить агента на чтение и слив приватного репозитория — проблему тогда назвали «дефектом дизайна без чистого патча». Более свежие межплатформенные тесты заставили Claude Code, Gemini CLI и Copilot сливать собственные секреты через текст issue и pull request, обходя защитные механизмы, которые GitHub добавил именно для предотвращения таких случаев. Разница в том, что прежние атаки протаскивали инструкции, а ADI подделывает саму запись о том, кто и что сказал, и фабрикует записи о совершенных действиях.
Корень проблемы исследователи видят в том, что традиционное программирование усвоило два урока с большой временной дистанцией. Первый — отделять код от данных — агенты уже выучили. Второй — отделять доверенные данные от недоверенных — пока не выучили. Внутри памяти агента имя отправителя письма лежит буквально рядом с телом самого письма, и ничто не помечает, за что ручается система, а что напечатал посторонний человек. Пока агенты не установят эту границу, убедительная ложь о том, кто именно прислал сообщение, останется достаточным условием для успешной атаки.


Новое на сайте

Ссылка