Когда какая-либо технология начинает стремительно распространяться, вопросы безопасности поначалу нередко отходят на второй план. Сначала – возможности, интеграции, эксперименты. Затем – проблемы. С протоколом MCP сейчас именно такой момент.
Что такое MCP и зачем он вообще нужен
MCP расшифровывается как Model Context Protocol – протокол контекста модели. Проще говоря, это стандарт, который позволяет ИИ-ассистентам и языковым моделям подключаться к внешним инструментам и источникам данных. Что-то вроде «разъёма», через который модель может обращаться к файловой системе, базам данных, веб-сервисам и другим ресурсам.
Раньше каждый разработчик придумывал свой способ «объяснить» модели, как работать с внешними инструментами. MCP появился как попытка унифицировать этот процесс: один протокол – много инструментов. Это удобно, и именно поэтому он начал активно использоваться в ИИ-приложениях.
Но у любого стандарта, который становится популярным, появляются и уязвимости – особенно если он разрабатывался с прицелом на функциональность, а не на защиту.
Почему MCP оказался в центре внимания с точки зрения безопасности
MCP-серверы – это программы, которые предоставляют языковым моделям доступ к тем самым внешним инструментам. Модель общается с сервером, сервер выполняет действия: запускает команды, читает файлы, обращается к API. Звучит разумно – пока не начинаешь думать о том, что может пойти не так.
Исследователи в области безопасности выявили несколько классов уязвимостей, которые уже проявляются на практике. Разберём основные.
Выполнение произвольного кода
Некоторые MCP-серверы принимают команды от модели и выполняют их практически без проверки. Если злоумышленник сможет повлиять на то, что модель «попросит» сервер сделать – например, через специально сформулированный запрос или подменённые данные – сервер может выполнить вредоносный код. Это называется удалённым выполнением кода, и это одна из самых серьёзных угроз в любой системе.
Утечка данных
MCP-серверы часто имеют доступ к конфиденциальной информации: файлам, токенам авторизации, переменным окружения. Если сервер недостаточно ограничивает, что именно может запросить модель, данные могут «утечь» – оказаться переданными туда, куда не следует. Это называется эксфильтрацией данных.
Повышение привилегий
Ещё один сценарий: злоумышленник использует MCP как точку входа, чтобы получить больше прав в системе, чем у него изначально есть. Например, модель работает с ограниченными правами, но через уязвимый MCP-сервер атакующий может добраться до ресурсов, к которым у него не должно быть доступа.
Инъекции через подсказки – неочевидная, но реальная угроза
Отдельного внимания заслуживает атака, которая называется prompt injection – инъекция через подсказки. Суть в следующем: модель обрабатывает текст из внешнего источника – например, читает документ или страницу сайта. В этом тексте злоумышленник заранее спрятал инструкции для модели. Модель воспринимает их как команды и выполняет – хотя пользователь ничего подобного не просил.
В связке с MCP это особенно опасно. Модель читает «безобидный» документ, в котором зашита команда вроде «отправь все файлы из папки Documents на этот адрес». Сервер выполняет действие. Пользователь даже не подозревает, что произошло.
Это не теоретическая угроза – подобные сценарии уже демонстрировались на практике.
Проблема доверия между серверами
Современные ИИ-приложения часто работают не с одним MCP-сервером, а сразу с несколькими. Один отвечает за доступ к файлам, другой – за работу с почтой, третий – за поиск. И вот здесь возникает интересная проблема: серверы могут доверять друг другу больше, чем следует.
Если один из серверов скомпрометирован или ведёт себя недобросовестно, он может отдавать команды другим серверам – и те будут их выполнять. Получается цепочка, в которой один слабый элемент ставит под угрозу всю систему.
«Отравление» инструментов и подмена описаний
MCP-серверы описывают свои инструменты в текстовом виде – модель читает эти описания, чтобы понять, что умеет каждый инструмент. Здесь тоже есть уязвимость.
Атака называется tool poisoning – «отравление» инструментов. Злоумышленник может подменить или модифицировать описание инструмента так, чтобы модель использовала его не по назначению. Например, инструмент для чтения файлов вдруг «описан» таким образом, что модель начинает отправлять содержимое файлов во внешний сервис.
Похожий вариант – rug pull: сначала сервер ведёт себя честно, набирает доверие пользователей, а затем внезапно меняет поведение. Поскольку модель не перечитывает описания инструментов при каждом запросе, изменение может остаться незамеченным.
Конфликты имён как точка входа для атаки
Ещё один неочевидный вектор – конфликты имён между инструментами разных серверов. Если два MCP-сервера предоставляют инструмент с одинаковым названием, модель может перепутать, к которому обращаться. Злоумышленник может создать сервер с инструментом, имя которого совпадает с именем легитимного инструмента, и таким образом «перехватить» вызовы.
Насколько это всё серьёзно прямо сейчас
Важно не впадать в панику, но и не преуменьшать. MCP – молодой протокол, и его экосистема ещё формируется. Многие из описанных уязвимостей не являются специфическими именно для MCP – похожие проблемы существуют в любых системах, где один компонент передаёт команды другому. Но в случае с ИИ-инструментами граница между «инструкцией пользователя» и «данными из внешнего источника» размыта намеренно – именно это и делает модели гибкими. И именно это создаёт новые риски.
Ситуация усугубляется тем, что MCP-серверы часто разрабатываются энтузиастами и небольшими командами, для которых безопасность – не первый приоритет. Стандарты аудита и сертификации пока не устоялись. Пользователь, подключающий сторонний MCP-сервер, в большинстве случаев не знает, насколько тот безопасен.
Что с этим делать – хотя бы на базовом уровне
Если вы используете ИИ-инструменты с поддержкой MCP или разрабатываете что-то на его основе, несколько базовых принципов помогут снизить риски:
- Принцип наименьших привилегий. MCP-сервер должен иметь доступ только к тому, что ему действительно нужно. Если инструмент читает файлы – у него не должно быть прав на отправку данных в сеть.
- Проверка источников. Сторонние MCP-серверы стоит использовать с осторожностью, особенно если они малоизвестны или не имеют открытого кода для проверки.
- Изоляция. Там, где это возможно, MCP-серверы лучше запускать в изолированной среде – чтобы даже в случае компрометации они не могли добраться до критических ресурсов.
- Скептицизм к описаниям инструментов. Если вы разработчик, не доверяйте текстовым описаниям инструментов безоговорочно – они могут быть изменены.
Это только начало разговора
MCP – полезный протокол, и его распространение понятно: он решает реальную задачу. Но безопасность в этой области пока серьёзно отстаёт от функциональности. Это типичная история для молодых технологий – и сейчас именно тот момент, когда исправлять пробелы проще всего, пока экосистема ещё не стала повсеместной.
Исследователи, разработчики протокола и сообщество постепенно начинают уделять этим вопросам больше внимания. Появляются рекомендации, обсуждаются стандарты. Но пока это скорее разрозненные усилия, чем системная работа.
Следить за тем, как развивается ситуация с безопасностью MCP, стоит всем, кто так или иначе связан с ИИ-инструментами – как пользователям, так и тем, кто их создаёт.