Всем привет! Это Денис из команды SourceCraft Security. Я уже рассказывал вам про атаки на веб-приложения и эксплойт за 15 минут и один доллар. А сегодня хочу поговорить о том, как злоумышленники могут использовать MCP-серверы в своих целях и что с этим делать.
♒️ Что такое MCP
Model context protocol — это «руки» агента, которыми он меняет состояние каких-либо ресурсов: читает логи, добавляет записи в БД, назначает встречи в календаре, вносит изменения в основную ветку репозитория и делает множество действий.
Я нашёл множество открытых MCP-серверов в процессе исследования безопасности AI-агентов, о результатах которого недавно рассказал на конференции Saint Highload. Это значит, что при определённых условиях «руки» в интернете доступны любому, кто знает, где их искать.
♒️ Как это выглядит на практике
Злоумышленник может попробовать выдать себя за легитимного AI-агента, подключиться к незащищённому MCP-серверу и получить список его доступных инструментов и возможностей. А там, например, есть функция чтения валюты и информация о количестве денег на счёте, что даёт возможность мошеннику реализовать сценарий перевода этих средств на свой кошелёк.
♒️ Что я сделал в процессе исследования
Подготовил несложную систему оценки риска, которая строится на сумме баллов за следующие недостатки конфигурации MCP-сервера:
🟣 Нет аутентификации
🟣 Нет поддержки зашифрованного соединения
🟣 Нет CORS-заголовков
🟣 Есть потенциально опасные инструменты (например, exec)
🟣 Есть возможность получения списка инструментов и ресурсов
Затем с помощью поискового движка Shodan я получил список открытых MCP-серверов. Для этого собрал 148 поисковых запросов и их комбинаций вроде:
"port:3000 jsonrpc, port:8080 text/event-stream"
"Model Context Protocol", "jsonrpc": "2.0"
"html:"mcp server""
"\"capabilities tools resources\""
"port:3000 text/event-stream"
"\"workers.dev\" mcp"
"\"Bad Request: Mcp-Session-Id header is required\""
"\"Not Acceptable: Client must accept text/event-stream\""
"port:7860 \"langflow\" \"mcp\""
"Bad Request: Mcp-Session-Id header is required"
Каждый из этих запросов является возможным паттерном для MCP. В итоге после дедупликации я получил 1699 уникальных серверов.
♒️ Зачем это нужно
Такая методика и инструмент фингерпринтинга позволяют проверить доступность своих MCP-ресурсов в Сети.
Если они вдруг нашлись в открытом доступе и по разным причинам их невозможно оттуда убрать, у вас есть возможность снизить вероятность атак за счёт правильной аутентификации, TLS и ограниченного списка инструментов. Также AppSec-инженер может добавить оценку риска, который связан с мисконфигурациями, в проверку на этапе CI/CD и правильно настроить MCP.
⏩ Инструмент для поиска MCP-серверов через Shodan я опубликовал в репозитории.
Подписывайтесь:
💬 @Yandex4Security
📹 @YandexForSecurity
