Cайт программиста Ruby, веб-разработчика Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Искусственный интеллект собрал приложение, но забыл закрыть базу. Таких случаев нашли больше 16 тысяч

Исследователи 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. Нужно проверить, какие таблицы доступны анонимным и авторизованным ролям, включить построчное разграничение доступа и оставить каждой роли только необходимые разрешения. Особенно внимательно стоит проверять таблицы, которые создавали миграции, внешние инструменты и ИИ-агенты, поскольку такие способы создания базы могут обходить защитные настройки панели управления.

SecurityLab