Перейти к содержимому
Выберите тему

Отравление инструментов и внедрение инструкций

Как содержимое сервера MCP может управлять моделью - отравление описаний инструментов и внедрение инструкций через данные, что об этом говорит спецификация 2026-07-28 и что остаётся на хосте

требования протокола сверены со спецификацией 2026-07-28 4 октября 2026

Класс Где спрятаны указания Кто их подложил
отравление инструментов в описании или схеме инструмента, которые видит модель, но обычно не читает пользователь владелец сервера
внедрение инструкций через данные в результате вызова, ресурсе или тексте шаблона: письме, странице, записи в трекере любой, кто может записать данные туда, откуда сервер их читает

Отравление инструментов. Термин ввела компания Invariant Labs в публикации от 1 апреля 2025. По её описанию, вредоносный сервер может не только вывести данные пользователя, но и изменить поведение агента по отношению к другим, доверенным серверам. Это утверждение исследователей об изученных ими клиентах, а не свойство протокола.

Внедрение инструкций. Общий класс уязвимостей приложений с языковыми моделями. В перечне рисков OWASP он значится как LLM01: Prompt Injection. Для MCP важен непрямой вариант: указания приходят не от пользователя, а в данных, которые вернул инструмент. Сервер при этом может быть полностью честным.

Требования собраны со страниц спецификации 2026-07-28. Ни одно из них не обещает, что атака невозможна.

Требование Кому Сила Где
считать аннотации инструментов ненадёжными, если они получены не от доверенного сервера клиенту обязан Tools
оставлять человеку возможность отклонить вызов инструмента приложению следует Tools
показывать, какие инструменты доступны модели, и отмечать момент вызова приложению следует Tools
показывать пользователю параметры до вызова, чтобы данные не утекли незаметно клиенту следует Tools
проверять результат инструмента, прежде чем передавать его модели клиенту следует Tools
очищать результат инструмента перед выдачей серверу обязан Tools
проверять входные и выходные данные шаблонов, чтобы не допустить внедрения всем обязаны Prompts
не менять поведение и не принимать решения о безопасности по названию и версии, которые сообщила другая сторона всем не следует базовый протокол
не загружать автоматически схемы по сетевым ссылкам $ref всем не должны базовый протокол

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

Функция Sampling позволяла серверу просить у клиента ответ языковой модели. В обосновании её перевода в устаревшие (SEP-2577) сказано, что она создаёт поверхность для внедрения инструкций и вывода данных и что отказ от неё этот риск снижает. Статус и сроки - на странице «Что устарело».

Это советы по реализации. Правилами MCP они не являются.

  • Подключать серверы только из источников, которым вы доверяете, и проверять, что именно запускается.
  • Показывать пользователю полное описание инструмента при подключении и при его изменении.
  • Требовать подтверждение для действий, которые что-то меняют или отправляют наружу.
  • Разделять инструменты, читающие внешние данные, и инструменты с доступом к закрытым данным: вместе они дают путь для вывода информации.
  • Выдавать серверу минимально нужные права и области доступа.
  • Вести журнал вызовов инструментов.