Введение
Статья рассматривает угрозу для LLM-агентов с долговременной памятью. Такие агенты читают почту и календарь, помнят контакты, договорённости и предыдущие действия, а затем используют эти данные при новых задачах.
Авторы называют атаку GhostWriter. Её принципиальное отличие от обычной prompt injection в том, что вредоносное содержимое не обязательно должно сработать сразу. Оно приходит через недоверенный канал, например внешнее письмо или приглашение в календарь, сохраняется в памяти агента и активируется позже, когда пользователь задаёт внешне безобидный, но тематически связанный запрос.
Проблема здесь не в прямом доступе атакующего к базе памяти или учётной записи пользователя. Предполагается более реалистичный сценарий, когда атакующий способен лишь отправить сообщение, которое обработает агент. Если система без разбора сохраняет входящие данные и позже считает извлечённую память доверенным контекстом, одно сообщение может влиять на действия агента в будущих сессиях.

Модель угроз
Авторы моделируют офисного персонального помощника, который обрабатывает письма и встречи, отвечает на вопросы пользователя и умеет выполнять действия через инструменты — например, готовить и отправлять письма. Долговременная память хранит факты, краткие выжимки событий или предыдущие планы действий; поиск обычно строится по семантической близости к текущему запросу.
При этом атакующий:
- не имеет доступа к API агента, его учётной записи или хранилищу памяти;
- не изменяет данные «в обход» приложения;
- может присылать внешние письма и приглашения, маскируя их под обычную рабочую коммуникацию;
- стремится к тому, чтобы агент сохранил ложный факт либо скрытую директиву и извлёк её при последующей задаче пользователя.
Авторы выделяют четыре последствия: искажение целостности данных, утечку чувствительной информации, скрытую эксфильтрацию и выход агента за допустимые границы действий. Например, ложное изменение контактных данных может быть сохранено как факт и повлиять на адресата будущего письма.
Как работает GhostWriter
Атака состоит из двух разнесённых во времени фаз.
Инъекция в память Атакующий посылает правдоподобное сообщение с полезным на вид контекстом. Агент получает его через свой обычный инструмент, суммирует или сохраняет и помещает результат в долговременную память.
Активация Пользователь позднее формулирует обычную задачу, семантически связанную с темой сообщения. Механизм retrieval находит отравлённую запись, добавляет её в контекст, и агент может принять содержимое памяти за достоверную инструкцию или факт.

Для повышения вероятности извлечения атакующее сообщение оптимизируют не под дословный будущий запрос, а под близость к его теме. В рассматриваемой black-box модели для этого достаточно открытого корпуса писем и отдельной embedding-модели: атакующий подбирает правдоподобный контекст, который будет похож на предполагаемую пользовательскую задачу. Он не знает внутреннюю embedding-модель агента и не управляет самим поиском.
Это делает угрозу особенно важной: вредоносный контент может пережить исходное письмо, сработать в другой сессии и выглядеть для модели как внутреннее знание системы. Обычные механизмы, которые анализируют только текущий запрос, здесь видят лишь последнюю фазу атаки.
Эксперименты
Авторы адаптировали к общему сценарию пять архитектур агентов с памятью:
- A-Mem;
- Mem0;
- ExpeL;
- Letta (бывший MemGPT);
- MemoryOS.
Каждую архитектуру проверили с GPT-5.4-mini, DeepSeek-V4-Flash, Gemini-2.5-Flash и Llama 3.1 8B. Для воспроизводимого окружения агенты сначала обрабатывали синтетическую пятидневную рабочую неделю, то есть брали письма, календарные события, встречи, изменения сроков и контактной информации. Затем для каждого теста состояние памяти возвращали к этой чистой исходной точке.
Было создано 16 сценариев с доставкой через письмо или календарное приглашение. Исследователи измеряли три разных показателя:
| Этап | Что означает успех |
|---|---|
| Инъекция (P1) | Вредоносное содержимое сохранилось в памяти |
| Извлечение | Отравлённая запись нашлась при безопасном запросе пользователя |
| Активация (P2) | Извлечённая запись изменила поведение агента |
Средняя успешность инъекции составила около 98%, а средняя успешность активации около 60% по всем проверенным агентам и моделям. У большинства связок инъекция проходила в 100% случаев. Mem0 и ExpeL иногда преобразовывали исходный текст так, что вредоносное содержание не сохранялось полностью; поэтому их показатели инъекции были ниже.
У ExpeL также наблюдалась наименьшая активация — от 28% до 63% в зависимости от модели. Авторы связывают это с тем, что ExpeL хранит траектории предыдущих действий, а не воспринимает каждую запись как авторитетный факт. Но это не делает архитектуру универсально безопасной: в сравнительном опыте она оказалась особенно чувствительной к обычной prompt injection.
GhostWriter и обычная prompt injection
Авторы отдельно сравнили GhostWriter с prompt injection из AgentDojo. Прямая инъекция во входном сообщении у большинства протестированных агентов редко активировалась после сохранения: для многих связок P2 находился в диапазоне от 0% до 16,7%. GhostWriter отличается тем, что сообщение заранее адаптируют для будущего retrieval, поэтому отравлённая память чаще возвращается именно в нужный момент.
Это важно и для обнаружения. DataFilter не распознал использованные авторами варианты GhostWriter. Проверка отдельной LLM лучше замечала жёстко сформулированные директивы, но почти не срабатывала на описательные, вежливые варианты. Следовательно, защита, ориентированная только на характерные фразы prompt injection, не покрывает угрозу отравления памяти.
AM-Sentry: двухэтапная защита
В качестве защиты предложен Agentic Memory Sentry (AM-Sentry). Это прослойка между источниками данных, памятью и контекстом агента. Она не привязана к конкретной реализации memory store и состоит из двух независимых барьеров.
Политика сохранения
Перед записью в память система оценивает, нужно ли сохранять кандидата и насколько он рискован. В более строгих вариантах LLM-судья размечает запись по нескольким полям:
- происхождение и уровень доверия к источнику;
- тип: факт, контактная информация, предпочтение, workflow или инструкция;
- будущая полезность;
- наличие потенциально опасного поведения, чувствительных данных, противоречий и непроверяемых утверждений.
Итоговое решение принимает не только LLM, но и детерминированная логика с порогами. Самый строгий режим использует чек-лист из семи пунктов, жёстко отклоняет записи с признаками изменения поведения агента и дополнительно передаёт оценку второму LLM-судье — чтобы заметить возможную компрометацию первого.

Экран извлечения
Даже хорошая политика сохранения не гарантирует, что опасная запись никогда не окажется в памяти. Поэтому второй барьер запускается при retrieval, то есть каждая найденная запись проверяется до попадания в контекст модели.
Экран исключает память, если она:
- не относится непосредственно к текущей задаче;
- содержит директивы или правила поведения вместо данных;
- пришла из недоверенного источника и содержит непроверяемые утверждения;
- противоречит уже доверенной информации.
Идея хорошо формулируется в статье: память должна быть данными, а не командами. Происхождение, доверие и риск стоит хранить как метаданные, а не каждый раз пытаться угадать их по одному только тексту.
Результаты защиты и ограничения
Безопасность и полезность измерялись отдельно. Наиболее строгая политика сохранения снизила средний успех GhostWriter до 15% для ChatGPT, DeepSeek и Gemini, но хуже работала с Llama: модель принимала 77% вредоносных записей в строгом формате. В сочетании с экраном извлечения строгая конфигурация снизила средний end-to-end успех атаки ниже 12% для всех моделей, кроме Llama, где среднее значение составило 20%.
При этом авторы не утверждают, что защита окончательна. Их тест на полезность — синтетическая рабочая неделя, а не реальные данные и процессы компании. Проверены только письма и календарь, но в реальном агенте источниками недоверенного контента также будут документы, веб-страницы и репозитории кода. Веса в правилах AM-Sentry выбраны эвристически, а атакующий в оценке не адаптировался к самой защите.
Есть и практический компромисс: сильная фильтрация способна блокировать полезные воспоминания. В опытах падение метрик полезности в целом было небольшим, но Llama в строгих режимах чаще чрезмерно отбрасывала легитимные данные. Поэтому внедрение подобной защиты требует измерять не только долю заблокированных атак, но и ошибки в реальных рабочих сценариях.
Вывод
GhostWriter показывает, что долговременная память LLM-агента — это не просто оптимизация контекстного окна, а состояние с собственными требованиями к безопасности. Если любое внешнее сообщение может стать доверенной памятью, то агент получает отложенный канал управления: атака начинается при получении письма, а проявляется при нормальной задаче пользователя.
Главный практический вывод статьи — фильтровать нужно оба перехода: внешний ввод → память и память → контекст модели. Для этого важны происхождение данных, структурированные метаданные, запрет трактовать память как инструкцию и отдельная проверка записей в момент извлечения. Так защита становится частью архитектуры памяти, а не ещё одним промптом поверх агента.