Исследователи UpGuard обнаружили 16 326 открытых баз Supabase, таблицы которых можно было читать через интерфейс доступа к данным. Более чем в половине случаев структура таблиц указывала на хранение персональной информации. Причиной стали ошибки в настройках приложений, в том числе проектов, которые разработчики создавали с помощью ИИ-ассистентов.
Для проверки исследователи собрали около 300 тысяч доменов с признаками использования Supabase. Адрес проекта и предназначенный для клиентских приложений ключ часто можно найти в открытом JavaScript-коде сайта, после чего команда проверяла доступность распространённой таблицы users. Если такой таблицы не существовало, интерфейс базы в некоторых случаях подсказывал название другой доступной таблицы.
Само присутствие публичного ключа в коде не считается утечкой секрета. Supabase специально предусматривает ключи, которые можно использовать в браузере и мобильных приложениях. Доступ к данным должны ограничивать права ролей и построчная защита базы. Если разработчик разрешил анонимной роли обращаться к таблице и не настроил правила доступа, пользователь с публичным ключом может получить строки, которые приложение не собиралось показывать.
UpGuard не скачивала содержимое всех найденных баз. При анализе 16 326 доступных экземпляров исследователи в основном изучали структуру таблиц и названия полей, чтобы определить возможные типы информации. Более половины баз содержали признаки персональных данных, меньшая доля могла хранить пароли или токены аутентификации, а в небольшом числе случаев встречались поля, похожие на реквизиты банковских карт.
Несколько баз команда проверила подробнее, чтобы убедиться, что проблема затрагивает реальные сведения. В одном сервисе для авторов взрослого контента нашли записи о 65 467 пользователях, включая имена, адреса электронной почты, даты рождения, сведения из документов и платёжные реквизиты, а также более 100 тысяч личных сообщений. База сервиса одноразовых кодов содержала более 100 тысяч SMS, среди которых встречались не только коды подтверждения, но и обычная переписка посторонних людей.
Ещё одна открытая база принадлежала сервису парковки автомобилей и содержала сведения более чем о 100 тысячах клиентов: номера телефонов, адреса электронной почты, государственные номера машин, историю посещений и заметки сотрудников. В другом случае исследователи нашли почти пять тысяч записей клиентов сервиса для переезда в Канаду, причём 884 пароля хранились в открытом виде. База, связанная с консульской службой одной из африканских стран, раскрывала персональные и адресные данные 25 тысяч человек, включая сведения о местах временного проживания. Владельцев приложений, где UpGuard подтвердила существенное раскрытие информации, исследователи уведомили о проблеме.
Подобные ошибки в проектах Supabase известны как минимум с 2025 года. Основная проблема возникает, когда приложение полагается на находящийся в клиентском коде ключ как на средство защиты, хотя ограничивать запросы должна сама база данных. Риск особенно заметен при разработке с ИИ, поскольку агент может создать таблицы, подключить интерфейс доступа к данным и добиться работающего приложения, не настроив ограничения для каждой роли. Отдельно проверять ключи доступа и разрешения особенно важно в проектах, где значительную часть кода и конфигурации генерирует ИИ.
Supabase уже меняет настройки платформы, чтобы уменьшить вероятность подобных ошибок. Таблицы, созданные через панель управления, получают построчную защиту по умолчанию, а система предупреждает владельца о незащищённых таблицах. Для новых проектов с 30 мая 2026 года Supabase постепенно вводит новые правила: таблицы в общедоступной схеме больше не должны автоматически получать разрешения на работу через интерфейс доступа к данным. Для существующих проектов принудительный переход запланирован на 30 октября 2026 года, при этом уже созданные таблицы сохраняют прежние права и требуют отдельной проверки.
Разработчикам старых проектов поэтому недостаточно обновить приложение или скрыть публичный ключ из JavaScript. Нужно проверить, какие таблицы доступны анонимным и авторизованным ролям, включить построчное разграничение доступа и оставить каждой роли только необходимые разрешения. Особенно внимательно стоит проверять таблицы, которые создавали миграции, внешние инструменты и ИИ-агенты, поскольку такие способы создания базы могут обходить защитные настройки панели управления.