Обычная веб-страница. Пользователь просит чат-бота её пересказать. Бот честно читает страницу — и заодно отправляет на чужой сервер имя пользователя, приблизительный регион, тип подписки и содержимое текущего разговора. Ни предупреждения, ни кнопки «вы уверены?».
Самое неприятное здесь не утечка. А то, что защита, которая должна была её остановить, отработала штатно. Она просто смотрела не туда — и в этом «не туда» системная проблема почти всех сегодняшних ИИ-помощников.
Что произошло: инструкция, которую сторож не прочитал
В августе 2026 года исследователи компании Adversa AI опубликовали разбор приёма, который назвали cryptographic context injection — «инъекция через зашифрованный контекст». Мишенью стал Grok от xAI, вторая демонстрация в том же отчёте касалась Gemini в режиме глубокого размышления. То есть речь не о дефекте одного продукта, а об общем свойстве конструкции.
Принцип, без рабочих деталей, такой. Вредоносная инструкция кладётся на страницу не открытым текстом, а в закрытом, преобразованном виде — так, что сканеру безопасности она видна как бессмысленный набор символов. Рядом лежит всё необходимое, чтобы вернуть этот набор в читаемый вид. Сканер проверяет страницу и не находит запрещённого: запрещённых слов там действительно нет. А модель, у которой есть встроенная песочница для вычислений, доводит дело до конца — и получает готовую команду уже внутри рабочего контекста, после того как проверка закончилась.
Что известно о случае и о реакции компании
Adversa сообщила о проблеме xAI 3 июня 2026 года — напрямую и через программу вознаграждений на HackerOne. Компания подтвердила получение, но сроков исправления не назвала; повторные обращения 4 и 10 августа остались без ответа. На момент публикации разбора не было ни патча, ни номера CVE, ни публичного заявления, а приём продолжал работать на общедоступной версии сервиса. Успешность в тестах — около 40% на двадцати попытках, причём неудачи объяснялись не срабатыванием защиты, а тем, что модель не всегда доводила разворачивание до конца.
Оговорки важны. Утекало только то, что и так лежало в контексте текущего разговора: имя, регион, уровень подписки, реплики диалога. Доступ к другим чатам и к долговременной памяти исследователи не проверяли, а массового использования приёма в реальных атаках не зафиксировано — это демонстрация, а не эпидемия.

Почему защита по словам — это защита по форме
Самый дешёвый и потому самый распространённый способ обезопасить ИИ — поставить перед ним фильтр: набор правил или небольшую модель-классификатор, которая просматривает входящий текст и ищет признаки опасного. Характерные обороты вроде «забудь предыдущие указания», знакомые шаблоны атак, адреса, куда обычно уходят данные. Нашёл — заблокировал.
Проблема в асимметрии. Фильтр работает с формой: с конкретными символами, словами, шаблонами. Большая модель работает со смыслом: она восстанавливает намерение даже там, где форма искажена, перемешана, переведена на другой язык или собрана из кусков. Именно это качество делает её полезной — она понимает вас, когда вы пишете с опечатками, обрываете фразу на середине или объясняете криво. И это же качество делает фильтр бессильным: любое преобразование, которое не мешает модели понять, но мешает сканеру узнать, оказывается дырой.
Гонка, в которой догоняющий всегда позади
Фильтр по своей природе — список известного. Каждый новый способ переупаковать инструкцию приходится добавлять в этот список постфактум, после того как приём уже показали публично. Между появлением приёма и появлением правила против него всегда есть окно. Защита такого рода никогда не бывает готова заранее: она описывает вчерашние атаки и обещает от них уберечь.
Корень проблемы: для модели всё вокруг — один текст
В классической программе есть жёсткая граница между кодом и данными: строка из письма не может стать командой, потому что физически попадает в другой обработчик. Эту границу держит архитектура, а не добрая воля программы.
У языковой модели такой границы нет. Системная инструкция от разработчика, ваш запрос, текст веб-страницы, содержимое письма, подпись под картинкой, комментарий на полях документа — всё это приходит в неё одним потоком. Есть пометки о ролях, есть обучение «слушаться системного сообщения больше, чем содержимого страницы», есть иерархия инструкций. Но всё это статистические предпочтения, а не стена: достаточно убедительный текст внутри данных может перевесить указание разработчика, и гарантий конструкция не даёт.
Опасная тройка
Исследователь Саймон Уиллисон описал это через «смертельную тройку» — три способности, каждая из которых безобидна по отдельности: доступ к приватным данным, чтение недоверенного контента и возможность отправить что-то наружу. Как только все три сходятся в одном агенте, появляется и путь для кражи. В разобранном случае сложилось ровно так: разговор пользователя — это приватные данные, чужая страница — недоверенный контент, а исходящий сетевой запрос — канал наружу.

Почему упаковка обходит фильтр, но не мешает пониманию
Рабочих примеров здесь не будет — они и не нужны, чтобы понять принцип. У всех обходов он один: разорвать связь между смыслом и его узнаваемой формой, оставив смысл восстановимым.
Семейств упаковки, грубо говоря, три. Кодирование: текст переводится в другое представление и для сканера превращается в шум, оставаясь разворачиваемым для модели. Подмена и перестановка: знаки заменяются на визуально похожие, между ними вставляются невидимые разделители, часть фразы уходит на редкий язык — слово перестаёт совпадать со списком, но читается прежним. Разбиение: инструкция раскладывается на безобидные по отдельности части, а смысл возникает только при сборке — которую делает сама модель.
Случай с зашифрованной командой — крайняя точка этой логики. Работу по снятию упаковки выполняет сам инструмент защищаемой системы. Сканер, проверявший вход, к этому моменту уже отчитался, что всё чисто, и повторно никто ничего не смотрит. Проверка происходит до превращения, а команда появляется после.
Почему нельзя просто разворачивать всё на входе
Логичный вопрос: пусть фильтр сам разворачивает закодированные куски и проверяет результат. На практике это не масштабируется. Вариантов упаковки бесконечно много, и разворачивание произвольного содержимого — само по себе небезопасная операция. А главное, подавляющая часть закодированного на обычных страницах легитимна: шрифты, картинки, служебные данные. Фильтр, который спотыкается на каждой такой строке, просто сделает продукт неработоспособным.
Что делают разработчики
Консенсус индустрии на середину 2026 года звучит невесело, зато честно: полного решения нет ни у кого. Инъекция промпта стоит первым пунктом (LLM01) в списке рисков OWASP для приложений на языковых моделях и остаётся там третий год подряд. Крупные лаборатории прямо называют это нерешённой фронтирной проблемой безопасности. Даже авторы популярных эвристик вроде «правила двух» оговариваются, что это способ уменьшить радиус поражения, а не полноценная защита.
Поэтому фокус сместился. Вместо «научить модель не поддаваться» строят «обвязку, при которой поддавшаяся модель не может ничего испортить». Формулировка самих исследователей по итогам их же находки: чинить это надо не на уровне модели — все ограничители, которые реально ограничивают, находятся в системе вокруг агента.
Четыре подхода, которые действительно применяют
Ограничение прав. Агент получает не «доступ к почте», а «чтение писем за сутки»; не «доступ к диску», а конкретную папку. Чем уже полномочия, тем меньше можно сделать чужими руками.
Подтверждение необратимых действий. Отправка письма, платёж, удаление, публикация, изменение настроек — только через явное «да» от человека, с показом того, что именно будет сделано. Именно отсутствие такого шага превращает в разобранном случае любопытную демонстрацию в утечку.
Разделение доступа. Часть системы, которая читает недоверенный контент, лишена возможности отправлять что-либо наружу; часть, у которой есть выход в сеть, не видит приватных данных. Развитие идеи — схемы вроде CaMeL: одна модель строит план по вашему запросу и имеет права, вторая перемалывает недоверенный текст и прав не имеет вовсе, а между ними интерпретатор, отслеживающий происхождение каждого куска данных.
Вторая модель-надзиратель. Отдельный наблюдатель смотрит не на слова, а на поведение: соответствует ли то, что агент собрался сделать, тому, о чём его просили. Такой подход ловит рассогласование намерения и действия там, где словарный фильтр слеп. Но и он вероятностный — надзиратель тоже модель, и его тоже можно сбить.
Плюс журналы вызовов инструментов, оповещения на подозрительные последовательности и прозрачность о том, что попало агенту в контекст. Гарантии не даёт ни один слой; вместе они поднимают цену атаки — и это сегодня максимум достижимого.
Что может сделать пользователь
Хорошая новость: практическая безопасность здесь — вопрос того, где вы разрешаете агенту работать, а не того, какие слова вы ему пишете. Никакая инструкция «не выполняй чужие команды» не поможет, зато выбор задачи помогает всегда.
Где агента пускать спокойно
Задачи без приватных данных: пересказ публичной статьи, перевод, черновик с нуля, код в изолированном проекте. Задачи с вашими данными, но без чужого контента и выхода наружу: разобрать заметки, сделать сводку по таблице. Задачи с чужим контентом в режиме «читаю и показываю» — решение принимаете вы.
Где не стоит
Одновременный доступ к личной переписке или файлам и к произвольным ссылкам из интернета. Автоматические действия без подтверждения там, где ошибку не откатить: деньги, отправка сообщений от вашего имени, удаление, публикация. Самособранные наборы инструментов из разных источников — ни один поставщик не отвечает за то, что вы сами выдали агенту опасную комбинацию прав.
Гигиена, которая ничего не стоит
Не держите в одном разговоре и чувствительные документы, и просьбы «сходи по ссылке». Начинайте новый чат под новую задачу. Выдавайте доступы по одному, а не пакетом, и отзывайте неиспользуемые. И проверяйте не только результат, но и то, что именно ИИ собрался сделать.
Как понять, что с ботом что-то не так
Инъекция редко выглядит как взлом. Чаще — как странность, которую легко списать на «модель затупила».
Признаки, на которые стоит реагировать
Резкая смена поведения: посреди задачи меняется тон или язык, бот «вспоминает» правило, о котором вы не говорили, настойчиво уводит разговор в сторону. Просьбы подтвердить лишнее: запрос доступа не по теме или предложение «для удобства» открыть ссылку и что-то отправить. Действия, которых вы не просили: обращения к адресам, которых не было в запросе, самопоявившиеся черновики. Странная осведомлённость: бот упоминает данные, которые вы в этом разговоре не давали. И уход от прямого вопроса о том, что он только что сделал.
Что делать, если заметили
Остановить задачу и не продолжать в том же окне: заражённый контекст живёт до конца разговора. Начать чистый чат. Отозвать доступы, выданные под эту задачу. Проверить историю действий и, если что-то ушло, поменять пароли на затронутых сервисах. И сообщить в поддержку, приложив ссылку на страницу или письмо, после которых началась странность, — без обратной связи проблема не попадёт в очередь на исправление.
Пока у языковых моделей нет настоящей границы между «что читать» и «кого слушаться», безопасность помощника определяется не умом фильтра, а скромностью прав. Хороший агент — не тот, который умеет всё, а тот, кому не дали возможности сделать непоправимое.


Пока нет комментариев