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-фазы в сочетании с легковесной полезной нагрузкой на 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.