TL;DR
- MCP-сервер это не плагин, а хранилище учётных данных, которое общается с вашим агентом при каждом вызове: описания его инструментов и результаты их работы попадают в контекст модели с тем же весом, что и ваши собственные инструкции.
- GhostSplice показывает, что выравнивание модели не защита: приказ украсть данные, выданный одним блоком, GPT-4o, Gemini 2.0 Flash и Llama 3.3 отклоняют в 100% случаев; тот же приказ, разбитый между описанием инструмента и результатом инструмента, выполняется в 100% случаев.
- Клиент важен не меньше модели: Claude Haiku 4.5 отклоняет всё через API и уступает в 100% случаев в тесте из трёх фрагментов, запущенном внутри Cursor.
- Цепочка поставок уже под ударом: CVE-2025-6514 затронула mcp-remote, OAuth-прокси с более чем 400,000 загрузок, через инъекцию команд, которую запускает вредоносный сервер.
- Обнаружение на уровне протокола в Cloudflare и WriteGuard это первые настоящие корпоративные средства контроля, но им нужен Zero Trust с TLS-инспекцией, а локальный stdio-сервер в них никогда не появляется.
- Для одиночного разработчика или небольшой команды защита ручная: инвентаризация, происхождение, токены с узкими правами, подтверждение человеком на каждую запись и отношение к выводу инструментов как к данным.
Что говорят источники
MCP-сервер связывает вашего агента с внешним сервисом, поэтому хранит вместо вас всё, что нужно для подключения: токены, API-ключи, учётные данные сервисных аккаунтов. Анализ утечек от 17 августа начинается с прямого наблюдения: токены вставляют прямо в строки конфигурации, и они остаются читаемыми на диске, в одном спешном коммите от Git-репозитория s2. Вторая дыра по тому же анализу это избыточные права: широкие права, выданные при разработке, без изменений уходят в продакшен, поэтому один взлом раскрывает гораздо больше, чем оправдывало реальное использование s2. Четвёртая дыра это prompt injection: агент читает всё, что приносят его инструменты, веб-страницу, тикет, внутренний документ, и скрытая в этом содержимом инструкция выполняется так, будто пришла от вас, с помощью легитимных инструментов раскрывая то, что они должны были защищать s2.
Третья дыра это цепочка поставок. CVE-2025-6514 затронула mcp-remote, OAuth-прокси с более чем 400,000 загрузок: вредоносный сервер мог вызвать инъекцию команд на машине разработчика, выполнить код и уйти с учётными данными. Один популярный npm-пакет, установленный одной строкой, и дверь открыта s3.
Экосистема выросла быстрее, чем её защита. Официальный реестр насчитывает более 9,600 опубликованных серверов, число удалённых развёртываний серверов выросло в пять раз с мая 2025, публиковать может кто угодно, а центральной проверки нет; ваш агент доверяет случайной записи так же, как официальному инструменту s4. АНБ выпустило в мае отдельное руководство по безопасности MCP, где прямо сказано, что внедрение протокола опередило построение его защиты s5.
GhostSplice, названная исследовательской группой ASSET, заставляет агента выполнить эксфильтрацию самому. Вместо полного приказа о краже вредоносный сервер разбивает его: один фрагмент в описании инструмента, другой в результате, который этот инструмент возвращает. Каждая часть по отдельности выглядит безобидно; агент собирает всё, что попадает в его контекст, и добросовестно выполняет инструкцию целиком s1. Суть в цифрах. Когда инструкция дана одним блоком, GPT-4o, Gemini 2.0 Flash и Llama 3.3 отказываются в 100% случаев. С фрагментированной инструкцией все три подчиняются в 100% случаев s1. Модели Claude на поверхности держатся лучше, но Claude Haiku 4.5 отклоняет всё через API и уступает в 100% случаев в тесте из трёх фрагментов внутри Cursor: одна и та же модель отказывает в одном клиенте и выдаёт данные в другом, в зависимости от защиты, которую клиент добавляет или не добавляет s1. Что удалось украсть в тестах: SSH-ключи, секреты окружения, исходный код, данные клиентов, на изолированных проектах с фальшивыми ключами и с опубликованной воспроизводимой методикой s1. Та же лаборатория опубликовала в июне Ghostcommit, который прятал инструкции в PNG-файлах, упомянутых в соглашениях проекта, а затем кодировал украденные секреты в исходном коде целыми числами; фрагментация инструкций это семейство атак, а не разовый случай s1. Два условия остаются: вредоносный сервер уже должен быть подключён к вашему агенту, а агент должен иметь право читать целевые файлы s1.
На стороне предприятий Cloudflare называет «shadow MCP» неутверждённые серверы, которые разработчики подключают к своим агентам. После обновления спецификации каждый совместимый MCP-клиент отправляет заголовок MCP-Protocol-Version, и Gateway проверяет этот заголовок во всём анализируемом TLS-трафике, давая команде безопасности дашборд уникальных серверов, пользователей и объёмов запросов s6. Новейшая версия спецификации добавляет заголовки Mcp-Method и Mcp-Name, которые показывают запрошенную операцию и имя инструмента без вскрытия тела запроса, так что сеть может отличить агента, читающего тикет, от агента, удаляющего пятьдесят. Правила Cloudflare покрывают два случая: чистый shadow MCP (сервер, который никогда не утверждали) и обход портала (утверждённый сервер, к которому обратились напрямую), и оба блокируются одним базовым правилом s6.
WriteGuard, открытый в закрытой бете, относит каждый инструмент каждого MCP-сервера к уровню риска и применяет свою политику для каждого уровня: чтение проходит без трения; ограниченная запись, например комментарий, проходит, но подписывается как действие агента от имени конкретного человека, с событием аудита в центральном журнале; критическое действие, например слияние кода, деплой в продакшен или массовое удаление, блокируется до того, как сервер его обработает s7. Пример с GitLab из поста: чтение merge request проходит, комментарий проходит с атрибуцией, слияние отклоняется, пока его не сделает человек. Агент сохраняет права сотрудника, которому служит, но каждая запись несёт две подписи: человека и сессии агента. Cloudflare описывает собственное использование: их портал подключает 27 MCP-серверов против 13 в апреле s7.
Ограничения реальны. WriteGuard это закрытая бета по заявке, а обнаружение в Gateway требует развёртывания Cloudflare Zero Trust с включённой TLS-инспекцией s7. Обнаружение видит только сетевой трафик, который расшифровывает: локальный MCP-сервер, работающий по stdio как обычный процесс на вашей машине, для Gateway невидим, а именно так работает большинство серверов, установленных разработчиками s6. Ни один из этих инструментов не устраняет механизм, который вскрывает GhostSplice. Исследователи ASSET говорят, что решение в том, чтобы считать вывод инструмента данными, а не инструкциями, и такого разделения в агентах пока нет изначально. Их три рекомендации: не позволять значению, выданному одним инструментом, без проверки попадать в аргументы другого, сохранять возможность вручную отклонить каждый вызов инструмента и по умолчанию считать враждебной любую аннотацию от непроверенного сервера s1.
Вердикт: что защищает, а что нет
| Мера | Кому подходит | Вердикт |
|---|---|---|
| Отказы модели | Всем | Не рассчитывать как на защиту: 100% отказов при одном блоке, 100% подчинения при фрагментации [s1] |
| Защита на стороне клиента | Всем | Оставить: одна и та же модель отказала в API и уступила в Cursor [s1] |
| Инвентаризация и происхождение серверов | Одиночкам и командам | Оставить: GhostSplice требует, чтобы сервер уже был подключён [s1] |
| Отдельные токены с узкими правами, с ротацией | Одиночкам и командам | Оставить: токены в открытом виде и избыточные права это первые две дыры утечек [s2] |
| Закрепление версий и аудит MCP-зависимостей | Одиночкам и командам | Оставить: mcp-remote принёс инъекцию команд 400,000+ загрузок [s3] |
| Обнаружение по заголовкам в Gateway (MCP-Protocol-Version, Mcp-Method, Mcp-Name) | Предприятиям на Zero Trust | Попробовать, если TLS-инспекция уже есть; stdio-серверы не видит [s6] |
| Уровни риска WriteGuard | Предприятиям | Попробовать через лист ожидания; только закрытая бета [s7] |
| Подтверждение человеком на каждую запись, слияние и удаление | Всем | Оставить: ручная версия того, что WriteGuard ставит на поток [s7] |
Сделайте в понедельник
- Выгрузите список MCP-серверов, реально подключённых к каждому вашему агенту, и удалите все, которыми не пользовались последний месяц.
- Для каждого оставшегося сервера запишите, кто его публикует, и прочитайте, что он делает с вашими данными, прежде чем оставить; удалите любой сервер, который пришёл из треда, а не от вендора.
- Замените каждый общий или мастер-ключ в MCP-конфиге отдельным токеном с минимально нужными этому серверу правами и поставьте на нём дату ротации.
- Проверьте, что ни один из ваших MCP-конфигов не отслеживается в Git, и добавьте их в .gitignore там, где это не так.
- Закрепите версию каждого устанавливаемого MCP-пакета и проверьте lock-файл на версии mcp-remote, затронутые CVE-2025-6514.
- Включите ручное подтверждение для любого инструмента, который пишет, сливает, деплоит или удаляет, и держите его включённым во всех клиентах, которыми пользуетесь.
- Один раз просмотрите описания инструментов каждого стороннего сервера, ища инструкции, адресованные модели, а не вам.
- Если вы используете Cloudflare Zero Trust, включите TLS-инспекцию и постройте дашборд shadow MCP по заголовку MCP-Protocol-Version.
Что почитать дальше
- Прочитайте полный разбор GhostSplice: матрицу тестов по моделям и клиентам и три меры защиты, предложенные исследователями s1.
- Найдите Ghostcommit, июньскую атаку той же лаборатории, чтобы увидеть, как инструкции прятались в PNG-файлах, а украденные секреты кодировались целыми числами в исходном коде s1.
- Пройдите четыре пути утечки из анализа от 17 августа по своим конфигам: хранение в открытом виде, избыточные права, цепочка поставок, prompt injection s2.
- Прочитайте запись NVD по CVE-2025-6514 и проверьте, какие версии mcp-remote затронуты, прежде чем доверять любому OAuth-прокси в вашем стеке s3.
- Прочитайте рекомендации АНБ по проектированию безопасности MCP: это единственный вендорно-нейтральный чек-лист для команд, внедряющих автоматизацию на агентах s5.
- Изучите заголовки MCP-Protocol-Version, Mcp-Method и Mcp-Name в посте Cloudflare, даже если вы не пользуетесь Cloudflare: любой прокси под вашим контролем может их логировать s6.
- Возьмите четыре уровня риска WriteGuard (только чтение, минимальное воздействие, ограниченная запись, критический) как сетку для ревью инструментов, которые открывают ваши собственные серверы s7.
- Просмотрите README официального реестра, чтобы понять, что требуется для публикации и что не проверяется s4.
Источники
- Malicious MCP servers can split exfiltration orders to bypass model refusals (GhostSplice), The Hacker News. Зачем читать: единственное место с цифрами по моделям и клиентам, плюс меры защиты от исследователей.
- How MCP servers can expose enterprise secrets, The Hacker News. Зачем читать: четыре пути утечки по порядку, пригодные как чек-лист аудита.
- CVE-2025-6514: mcp-remote command injection, NIST NVD. Зачем читать: затронутые версии и серьёзность первой широко установленной уязвимости цепочки поставок MCP.
- Official Model Context Protocol registry, modelcontextprotocol on GitHub. Зачем читать: показывает, как работает публикация и почему присутствие в реестре не признак доверия.
- NSA releases security design considerations for AI-driven automation leveraging MCP, NSA. Зачем читать: вендорно-нейтральное руководство по проектированию для команд, внедряющих MCP в масштабе.
- Detecting and blocking shadow MCP at the protocol level, Cloudflare blog. Зачем читать: объясняет заголовки спецификации, которые делают MCP-трафик видимым в сети.
- Bring secure MCP connectivity to your enterprise with MCP Server Portals and WriteGuard, Cloudflare blog. Зачем читать: модель риска по инструментам и схема двойной подписи идентичности, с конкретным примером GitLab.
FAQ
Защитит ли меня более безопасная модель от GhostSplice?
Нет. Атака никогда не просит ничего запрещённого одним куском, поэтому обучение отказам не срабатывает. Тот же Claude Haiku 4.5 отклонял всё через API и подчинялся в 100% случаев внутри Cursor; исход решила защита клиента, а не модель.
Я одиночный разработчик, есть ли для меня что-то в инструментах Cloudflare?
Сегодня нет. Обнаружение в Gateway требует развёртывания Zero Trust с TLS-инспекцией, WriteGuard это закрытая бета, и оба слепы к локальным stdio-серверам. Чек-лист выше это версия тех же мер для одиночки.
Безопасен ли сервер из официального реестра?
Присутствие в списке не означает проверку. В реестре более 9,600 серверов без центрального ревью, и ваш агент доверяет записи реестра так же, как инструменту вендора. Оценивайте происхождение и читайте код, а не листинг.
Какое одно изменение даёт больше всего?
Отдельные токены с минимальными правами для каждого сервера, с ротацией как у продакшен-секретов. Мастер-ключи в открытом виде в конфиг-файлах это первый путь утечки, и они делают любой другой сбой, от CVE-2025-6514 до prompt injection, гораздо дороже.
AIDive