Verify-MCP-сервер Kluster подвергает пользователей риску исчерпания кредитов
Сервер verify-mcp от Kluster AI доверяет любой сессии браузера, способной достичь его конечной точки /stream.
Когда сервис доступен по HTTP и привязан к 0.0.0.0, атака типа DNS rebinding (повторная привязка DNS) может превратить браузер жертвы в прокси, управляющий API из открытого интернета.
В ходе нашего тестирования этот приём позволил нам удалённо вызывать инструмент verify и расходовать кредиты Kluster без согласия пользователя.
Краткое изложение
- Вектор атаки: DNS rebinding злоупотребляет моделью доверия браузера, перенаправляя доменное имя с хоста злоумышленника на
127.0.0.1и обходя тем самым защиту Same-Origin Policy. - Экспонированный компонент: Сервер
verify-mcpот Kluster предоставляет/streamпо обычному HTTP и принимает запросы, опираясь исключительно на заголовки Host, предоставленные клиентом. - Наблюдаемый результат: После повторной привязки подконтрольный злоумышленнику JavaScript мог управлять инструментом verify так, как если бы это был локальный пользователь, расходуя платные кредиты.
Другие инструменты, рассмотренные на этом сайте, имеют ту же проблему: Уязвимость DNS rebinding в SSE-транспорте сервера Vet MCP и Сервер Neo4j MCP Cypher уязвим к захвату базы данных через DNS rebinding.
Технический анализ
Атака разворачивается в две DNS-фазы в сочетании с легковесной полезной нагрузкой на HTML/JavaScript:
- Первоначальная привязка к инфраструктуре злоумышленника. Жертва посещает подконтрольный злоумышленнику сайт. Первый DNS-запрос разрешается в публичный IP злоумышленника, что позволяет нам передать скрипт, опрашивающий конечную точку Kluster.
- Повторная привязка на localhost. После загрузки страницы DNS-сервер злоумышленника отвечает на последующие запросы к тому же хосту адресом
127.0.0.1. Браузеры повторно используют закэшированное имя, поэтому дальнейшие вызовыfetchнезаметно переключаются на loopback-интерфейс жертвы, сохраняя при этом исходную строку origin. - Управление API verify. Поскольку
verify-mcpразрешает HTTP-запросы с любого источника и не проверяет заголовки Host или Origin, наш скрипт успешно отправлял задания (POST) на/stream, запуская расходующие кредиты прогоны верификации.
Этот шаблон не уникален для Kluster, но сочетание транспорта HTTP и отсутствия валидации заголовков сделало эксплуатацию тривиальной.
Последствия
- Злоупотребление сервисом: Удалённые злоумышленники могут расходовать кредиты верификации Kluster или засыпать API запросами, вызывая финансовые потери или ограничение частоты запросов (rate limiting) для законных пользователей.
Рекомендации
Для Kluster AI
- Строго проверяйте заголовки
HostиOrigin, отклоняя запросы, которые не соответствуют явному списку разрешений (localhost,127.0.0.1). - Введите аутентификацию или API-токены даже для локальных сессий, чтобы гарантировать, что только доверенные вызывающие стороны могут запускать расходующие кредиты действия.
Для операторов и пользователей MCP
- Исходите из того, что при наличии DNS rebinding localhost-сервисы доступны через браузер; отслеживайте в логах неожиданные имена origin.
- Отдавайте предпочтение HTTPS (с корректными сертификатами) и явной валидации заголовков для любого инструмента, доступного за пределами loopback-интерфейса.
- Обучайте разработчиков закрывать локальные агенты при просмотре недоверенных сайтов или используйте сегментацию сети, чтобы изолировать агентские сервисы от стандартного профиля браузера.
Заключительные мысли
DNS rebinding продолжает размывать границу между «локальным» и «удалённым» для инструментария MCP.
Укрепляя транспортные каналы, валидируя метаданные запросов и требуя аутентификацию, поставщики платформ могут помочь разработчикам работать безопаснее.
Хронология
- 2025-07-17: Первоначальный отчёт направлен в службу безопасности Kluster AI.
- 2025-07-17: Kluster подтвердил получение в тот же день.
- 2025-08-29: В Kluster AI отправлен повторный запрос о статусе устранения.
- 2025-10-16: Технический бюллетень безопасности опубликован на mcpsec.dev.