Исследователь безопасности, просканировавший 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, что заставит контейнер выполнить любую команду на выбор злоумышленника.
Исследователь исправил код следующим образом:
- Использование
shlex.quote()для безопасного экранирования любого пути, предоставленного языковой моделью. - Добавление явных проверок на паттерны обхода пути (
../) перед формированием команды.
Повторный запуск сканера после исправления показал резкое снижение уровня риска, что подтвердило: принятые меры устраняют первопричину.
Кто выигрывает, а кто проигрывает
- Разработчики ИИ, встраивающие 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
