Сервер verify-mcp від Kluster AI довіряє будь-якій сесії браузера, здатній дістатися його ендпоінту /stream.

Коли сервіс доступний по HTTP і прив’язаний до 0.0.0.0, атака типу DNS rebinding може перетворити браузер жертви на проксі, який керує 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.