Исследователь безопасности, просканировавший 24 проекта серверов с открытым исходным кодом на базе MCP (Model-Control-Protocol), обнаружил одну, но критическую уязвимость типа «инъекция команд в песочницу» (sandbox command-injection), получившую 9,8 балла по шкале CVSS. Баг обнаружен в AgenticX — фреймворке для ИИ-агентов среднего уровня, — и позволяет злоумышленнику внедрять произвольные shell-команды в Docker-контейнер, в котором работает сервер.

Почему серверы MCP имеют значение

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

Крупномасштабные реализации MCP, такие как Cline или Aider, уже проходят регулярные аудиты и имеют отлаженные процессы обеспечения безопасности. 24 проекта, рассмотренные в данном исследовании, относятся к категории «среднего уровня» на GitHub (от 100 до 1000 звезд). В таких репозиториях зачастую приоритет отдается скорости выпуска новых функций, а не защищенности кода, что создает слепую зону для пользователей, полагающих, что любой MCP-сервер с открытым исходным кодом безопасен по умолчанию.

Сканирование

Исследователь создал сканер, который искал пять классических паттернов атак на веб-приложения:

  • Инъекция команд (Command injection)
  • Обход пути (Path traversal)
  • Подделка запроса на стороне сервера (SSRF)
  • SQL-инъекция
  • Побег из песочницы (Sandbox escape)

Запуск сканера по 5 911 исходным файлам выявил 94 предварительных оповещения. После ручного анализа только одно из них подтвердилось как реальная уязвимость.

Суть бага в AgenticX

AgenticX формирует shell-команды путем интерполяции строк, предоставленных пользователем, в Python f-строки, а затем передает результат напрямую в shell контейнера. При этом валидация или экранирование путей к файлам не выполняются. Таким образом, вредоносный промпт может содержать точку с запятой или другой метасимвол shell, что заставит контейнер выполнить любую команду на выбор злоумышленника.

Исследователь исправил код следующим образом:

  1. Использование shlex.quote() для безопасного экранирования любого пути, предоставленного языковой моделью.
  2. Добавление явных проверок на паттерны обхода пути (../) перед формированием команды.

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

Кто выигрывает, а кто проигрывает

  • Разработчики ИИ, встраивающие MCP-серверы в свои продукты, теперь получили наглядный пример того, как один пропущенный шаг санитайзинга (очистки данных) может разрушить всю цепочку безопасности. Относитесь к любому параметру, полученному от языковой модели, как к недоверенному вводу — точно так же, как к любой полезной нагрузке (payload) внешнего API.

Другая сторона медали

Исследователь подчеркивает, что сам протокол MCP остается надежным. Уязвимость — это не ошибка проектирования формата передачи данных, а недосмотр при написании кода в конкретной реализации. Более крупные, прошедшие аудит проекты уже решили подобные проблемы, и open-source сообщество может извлечь уроки из исправления AgenticX. Тем не менее, инцидент показывает, что проекты «среднего уровня» могут содержать критические баги, несмотря на скромное количество звезд.

Вывод

Одна непроверенная f-строка в AgenticX превратила целый MCP-сервер в плацдарм для выполнения произвольного кода. Этот случай доказывает, что безопасность экосистем ИИ-агентов зависит не столько от протокола, сколько от дисциплины при реализации. Разработчики должны рассматривать любой параметр, сгенерированный LLM, как враждебный, платформы должны обеспечивать механизмы защиты во время выполнения (runtime safeguards), а инструменты безопасности должны эволюционировать, чтобы понимать уникальные цепочки доверия, которые создают ИИ-агенты.

Source: dev.to/easterndev/i-scanned-24-mcp-server-projects-and-found-a-real-sandbox-command-injection-cvss-98-4k9h