Verify-MCP-сервер Kluster наражає користувачів на ризик вичерпання кредитів
Сервер 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-навантаженням:
- Первинна прив’язка до інфраструктури зловмисника. Жертва відвідує підконтрольний зловмиснику сайт. Перший 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.