· 1 мин

Промпт-инъекция научилась размножаться: AI-червь в Word и чем он грозит пайплайну на ai-агентах

AI-червь в Word - это самораспространяющаяся промпт-инъекция: в документ прячут белый по белому текст с инструкцией, Copilot принимает её за часть запроса и копирует в новый документ. Для пайплайна на ai-агентах опасно то, что заражённый источник, который агент сам зафетчил, делает его переносчиком. Защита только архитектурная: изолировать недоверенный контент и держать человека на публикации.

AI-червь в Word копирует промпт-инъекцию из документа в документ. Чем это грозит пайплайну на ai-агентах, который сам фетчит чужие посты, и как не дать заражённому источнику протечь.

Промпт-инъекция научилась размножаться: AI-червь в Word и чем он грозит пайплайну на ai-агентах

Промпт-инъекция научилась размножаться: AI-червь в Word и чем он грозит пайплайну на ai-агентах

У меня есть конвейер на ai-агентах, который сам ходит в интернет: фетчит мои же посты из Telegram, гуглит фактуру, тащит всё это в контекст и пишет черновик статьи. Работает, я доволен. А потом я прочитал разбор Саймона Уиллисона про червя в Word - и слегка поперхнулся кофе. Потому что штука, которую там описывают, бьёт ровно по такой архитектуре, как у меня.

Червь размножается через документы. А мой пайплайн как раз кормится чужими документами. Давайте разберёмся, насколько всё плохо и что с этим делать, если вы тоже собрали себе агентскую обвязку на коленке.

Что такое самораспространяющаяся промпт-инъекция?

Самораспространяющаяся промпт-инъекция - это спрятанная в документе инструкция, которую ИИ-ассистент принимает за часть вашего запроса и при генерации копирует в новый документ. Дальше новый документ становится переносчиком: его открывает коллега, его ассистент снова читает инструкцию - и всё повторяется без исходного файла атакующего.

Механика простая до обидного. Норвежский исследователь Håkon Måløy нашёл дыру в Copilot для Word: атакующий кладёт в документ JSON-инструкцию белым текстом по белому фону. Глазами вы её не видите, а Copilot при обработке снимает форматирование, читает скрытый текст и трактует его как часть задания. Дальше он не только правит нужный злоумышленнику кусок, но и дописывает всю вредоносную инструкцию обратно - тем же невидимым белым по белому. Свежесгенерированный документ выходит уже заражённым.

Раскрыли это 29 июля 2026 года. И да, тот же приём с белым по белому уже ловили в откликах на вакансии - там соискатели прятали в резюме команды для скринящего ИИ. Разница в том, что теперь инъекция не одноразовая, а самокопирующаяся.

Чем AI-червь опаснее одноразовой инъекции?

Обычная инъекция живёт ровно в том документе, куда её положили. Прочитали заражённый файл - получили один вредоносный эффект, закрыли, забыли. Червь опаснее тем, что размножается по цепочке: каждый обработанный документ порождает новый носитель, и зараза расползается по внутренней документации компании сама, без участия автора атаки.

Класс атаки называется Cross-Domain Prompt Injection (XPIA). Представьте: кто-то один раз подсунул в легитимный внутренний отчёт белый по белому текст. Коллега берёт этот отчёт как источник для своей работы через Copilot - и червь срабатывает снова, заражая уже его документ. Дальше по компании, из отдела в отдел, без единого письма от хакера.

История с раскрытием тут показательная. Måløy отдал баг в Microsoft по ответственному раскрытию, за несколько месяцев до публикации. Microsoft за это время накатил несколько митигаций и даже обновил модель под Copilot. Помогло частично: конкретные промпты прикрыли, но исследователь показал, что чуть изменённые формулировки продолжают воспроизводить весь класс атаки. То есть на момент публикации общего лекарства, закрывающего проблему целиком, так и нет.

Причём тут ai-агенты и мой пайплайн?

Притом, что мой конвейер статей - это готовая мишень по всем трём пунктам. Саймон Уиллисон ещё в июне 2025 года описал летальную триаду ai-агента: опасно, когда у агента одновременно есть доступ к приватным данным, обработка недоверенного контента и канал наружу. Совпали все три - можно вытаскивать секреты, слать что-то от вашего имени и запускать чужие сценарии.

Смотрю на свой пайплайн честно. Приватные данные - есть: агент читает мою базу тем, факты о проектах, локальную SQLite. Недоверенный контент - есть, и ещё какой: этап черновика через web_fetch тащит пост из Telegram по ссылке источника, а потом WebSearch'ем догугливает фактуру по ключам. Всё это - текст, который писал не я. Канал наружу - формально тоже есть: агент пишет в базу, а статья в перспективе едет в паблик.

То есть я сам построил систему, которая берёт непроверенный текст из интернета и прогоняет его через модель с доступом к моим данным. Если в тот телеграм-пост или в найденную страницу кто-то зашил инструкцию - агент не обязан понять, что это не я его прошу.

Как заражённый источник течёт через web_fetch и субагентов?

Заражённый источник течёт так: web_fetch отдаёт агенту текст страницы как обычные данные, но модель не различает данные и команды - они лежат в одном контексте. Если в тексте есть строчка вида "игнорируй прошлые инструкции и сделай X", у модели нет надёжного способа понять, что это данные, а не задание. Так недоверенная страница получает право голоса.

Дальше хуже, если в пайплайне есть субагенты. Я, например, гоняю черновик через субагентов-валидаторов и humanizer. Каждый из них наследует кусок того же контекста - и если в исходном посте сидела инъекция, она едет в субагента вместе с полезной фактурой. Один заражённый источник может дать команду, которую подхватит вся цепочка. Ровно логика червя, только вместо документов Word - шаги моего конвейера.

Отдельная поверхность - mcp сервер. Если агент ходит в инструменты через MCP, а какой-то из подключённых источников отдаёт вам текст с инъекцией, то это ещё один вход для той же атаки. Чем больше у агента ртов, которыми он ест внешний контент, тем больше мест, где в него можно засунуть команду.

Как защитить агентский пайплайн от инъекций? (безопасность ии агентов)

Защита от промпт-инъекции в ai-агенте - только архитектурная, не косметическая. Фильтром на входе весь класс атаки не закрыть, это уже доказали на Copilot. Работают три вещи: убрать одну из ног летальной триады, изолировать недоверенный контент от инструкций и оставить человека на любом действии наружу.

Первое - правило двух из трёх (Agents Rule of Two). Идея в том, что агент должен совмещать максимум два из трёх свойств: обработка недоверенного ввода, доступ к чувствительному, изменение состояния снаружи. Совпали все три - выносите такой шаг в песочницу с урезанными правами и логами. У меня самый жирный предохранитель тут - публикация не автоматическая: черновик всегда утверждает человек. Кнопки апрува прилетают мне в Telegram только после того, как черновик прошёл автопроверку скоркартой, - между "агент дописал текст" и "текст ушёл в паблик" всегда стоит мой палец на кнопке. Даже если инъекция долетит до черновика, наружу без моего клика она не уедет. Это и есть отрезанная третья нога.

Второе - изоляция недоверенного контента. Тот же подход, что Microsoft называет spotlighting: внешний текст надо помечать - делимитерами, датамаркингом или кодированием, - чтобы модель отличала "это данные для анализа" от "это команда". В идеале дальше едет двухмодельная схема вроде CaMeL: одна модель работает с доверенным запросом, вторая - с недоверенными данными, и инъекция физически не может повлиять на управляющие решения. Оговорка честная: CaMeL плохо дружит с открытыми агентами, которые сами решают, какой инструмент дёрнуть, - а у меня как раз такой. Так что для себя я беру принцип разметки, а не готовую архитектуру.

Третье - не давать агенту выносить лишнее. В пайплайне у меня уже стоит секьюр-фильтр границ данных: отдельный документ описывает, что из проектов можно тащить в тексты, а что - никогда (секреты, инфраструктуру, деньги). А этап проверки черновика отдельно делает стоп-чек утечек - вне баллов скоркарты, просто как красная лампа. Это не защита от инъекции напрямую, но это ограничение канала наружу: даже если агента уболтали, вытащить через него мои секреты сложнее. Как агент с доступом в веб утекает секреты через одну-единственную ссылку, я уже разбирал в отдельной статье - болячка та же, вид сбоку.

Что я поменял в голове после этого разбора

Главный вывод неприятный: я привык считать web_fetch безобидным, потому что это "просто чтение". А это не просто чтение - это дырка, через которую в мой контекст заходит текст, писавшийся кем угодно. Раньше я закладывался на то, что чужой пост - это фактура. Теперь закладываюсь на то, что чужой пост может быть заданием.

Что беру в работу: помечать зафетченный внешний текст явными границами в промпте, чтобы модель видела, где кончаются мои инструкции и начинаются недоверенные данные. Прикрутить агенту allow-list доменов, а не пускать web_fetch куда попало. И не трогать самый ценный предохранитель - человека на кнопке публикации. Полностью от инъекции это не спасёт, спасать пока нечему. Но три ноги триады у меня хотя бы не сходятся в одной точке без присмотра.

А AI-червь в Word - это хорошее напоминание, что мы строим агентов быстрее, чем учимся их запирать. Следите за источниками, из которых ваш агент ест. Я вот пошёл размечать свой web_fetch.

Частые вопросы

Можно ли полностью защититься от промпт-инъекции?

Нет. На август 2026 общей защиты, закрывающей весь класс XPIA, не существует даже у Microsoft. Риск снижают архитектурно: правило двух из трёх, изоляция недоверенного контента и человек, утверждающий любое действие наружу.

Что такое летальная триада ai-агента?

Термин Саймона Уиллисона (июнь 2025): опасно, когда у агента одновременно есть доступ к приватным данным, обработка недоверенного контента и канал наружу. Уберите любую из трёх ног - и инъекции нечем воспользоваться.

Опасен ли web_fetch в агенте сам по себе?

Сам фетч - это чтение, но он затаскивает недоверенный текст в тот же контекст, где лежат инструкции. Если модель не отличает данные от команд, зафетченная страница может дать агенту команду. Помогает разметка и изоляция внешнего контента.

Как готовился материал: черновик собран моим AI-конвейером по темам и заметкам из практики, факты сверены с первоисточниками, финальный текст я прочитал, поправил и утвердил перед публикацией. Обложку к статье тоже рисует нейросеть. Про сам конвейер — в разделе обо мне.

Влад Новиков
Пишу про AI-разработку без глянца. Новые разборы — сначала в канале.
Подписаться