Сервер 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:

  1. Первоначальная привязка к инфраструктуре злоумышленника. Жертва посещает подконтрольный злоумышленнику сайт. Первый DNS-запрос разрешается в публичный IP злоумышленника, что позволяет нам передать скрипт, опрашивающий конечную точку Kluster.
  2. Повторная привязка на localhost. После загрузки страницы DNS-сервер злоумышленника отвечает на последующие запросы к тому же хосту адресом 127.0.0.1. Браузеры повторно используют закэшированное имя, поэтому дальнейшие вызовы fetch незаметно переключаются на loopback-интерфейс жертвы, сохраняя при этом исходную строку origin.
  3. Управление 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.