
Что произошло
В начале июля 2025 года General Analysis опубликовала демонстрацию на тестовом проекте Supabase с фиктивными данными. В условном SaaS-сервисе клиенты пишут в поддержку, а разработчик просматривает тикеты через Cursor с подключённым Supabase MCP-сервером. Атакующий оставил в тикете текст с указаниями для модели. Когда разработчик попросил ассистента показать последние обращения, модель выполнила эти указания: прочитала таблицу integration_tokens с токенами и записала её содержимое новым сообщением в тот же тикет. 6 июля случай разобрал Simon Willison как пример «смертельной триады». Реальная утечка у клиентов Supabase не сообщалась: это исследовательская демонстрация.
Где нарушилась защита
Данные клиентов (текст тикета) и команды разработчика попадали в один контекст модели, и модель не отличала одно от другого. MCP-сервер выполнял SQL-запросы от имени роли service_role, которая по замыслу обходит защиту на уровне строк (RLS). Право записи в таблицу сообщений дало атакующему обратный канал. Ни один компонент не был взломан в классическом смысле: каждый работал по своим правилам, но вместе они создали путь утечки.
Последствия
- Продемонстрирована утечка секретных токенов интеграций из базы данных
- Показано, что защита на уровне строк не помогает, если агенту выдан ключ service_role
- Пример стал одним из основных аргументов за режим только для чтения у MCP-серверов баз данных
Реакция
Supabase рекомендует подключать свой MCP-сервер в режиме только для чтения и с привязкой к конкретному проекту. General Analysis также советовала ограничивать набор доступных инструментов и проверять вызовы инструментов вручную.
Уроки для бизнеса
- Нельзя выдавать AI-ассистенту ключи администратора базы данных
- Данные пользователей, попадающие в контекст агента, — потенциальный носитель чужих инструкций
- Режим только для чтения снижает риск, но не устраняет утечку через ответы модели
- Подключение MCP к рабочей базе требует такой же оценки, как выдача доступа новому сотруднику
Меры, которые предотвратили бы инцидент
- Подключать агентов к копиям или тестовым базам вместо рабочей
- Использовать роли с минимальными правами и режим только для чтения
- Ограничивать агенту набор таблиц и инструментов
- Включить ручное подтверждение SQL-запросов, сформированных моделью
- Хранить токены и секреты отдельно от таблиц, доступных агенту