Влияние
Злоумышленники могут обойти логику приложения для чтения, обновления или удаления записей в базе данных, если безопасность уровня строк (RLS) не обеспечивается должным образом [S1]. Это часто приводит к раскрытию личной информации (PII) или конфиденциальных данных приложения пользователям, у которых есть доступ только к общедоступному анонимному ключу API.
Основная причина
Supabase использует Postgres Row Level Security для управления доступом к данным на уровне базы данных, что имеет основополагающее значение для защиты данных [S1]. В среде Next.js разработчики должны создать клиент Supabase, который правильно обрабатывает файлы cookie и сеансы для обеспечения безопасности во время рендеринга на стороне сервера [S2]. Уязвимости обычно возникают, когда:
- Таблицы создаются без включения RLS, что делает их доступными через открытый анонимный ключ [S1].
- Клиент Supabase неправильно настроен в Next.js, из-за чего не удается правильно передать токены аутентификации пользователя в базу данных [S2].
- Разработчики случайно используют ключ
service_roleв клиентском коде, который обходит все политики RLS [S1].
Конкретные исправления
- Включите RLS: убедитесь, что безопасность на уровне строк включена для каждой таблицы в вашей базе данных Supabase [S1].
- Определение политик. Создайте определенные политики Postgres для операций
SELECT,INSERT,UPDATEиDELETE, чтобы ограничить доступ на основе UID пользователя [S1]. - Используйте SSR-клиенты. Внедрите пакет
@supabase/ssrдля создания клиентов в Next.js, которые правильно управляют аутентификацией на стороне сервера и сохранением сеанса [S2].
Как FixVibe проверяет это
FixVibe уже охватывает это посредством проверок развернутых приложений и репозиториев. Пассивный модуль baas.supabase-rls обнаруживает URL-адрес Supabase и пары анонимных ключей из пакетов JavaScript одного и того же происхождения, запрашивает у PostgREST метаданные общедоступной таблицы и выполняет ограниченный выбор только для чтения для подтверждения анонимного предоставления данных без изменения данных клиента. При сканировании репозитория также выполняется repo.supabase.missing-rls, чтобы пометить миграции SQL, которые создают общедоступные таблицы без ENABLE ROW LEVEL SECURITY, а при секретном сканировании выполняется поиск раскрытия ключа служебной роли до того, как он достигнет браузера.
