Въздействие
Нападателите могат да заобиколят логиката на приложението, за да прочетат, актуализират или изтрият записи в базата данни, ако защитата на ниво ред (RLS) не е наложена правилно [S1]. Това често води до разкриване на лична информация (PII) или чувствителни данни на приложението на потребители, които имат достъп само до публичния анонимен ключ API.
Първопричина
Supabase използва Postgres Row Level Security за управление на достъпа до данни на ниво база данни, което е основно за защитата на данните [S1]. В Next.js среда разработчиците трябва да създадат Supabase клиент, който правилно обработва бисквитки и сесии, за да поддържа сигурността по време на изобразяване от страна на сървъра [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 открива Supabase двойки URL и анонимни ключове от JavaScript пакети с един и същ произход, пита PostgREST за публични метаданни за таблица и извършва ограничен избор само за четене, за да потвърди излагането на анонимни данни, без да променя клиентските данни. Сканирането на репо също така изпълнява repo.supabase.missing-rls, за да маркира SQL миграции, които създават публични таблици без ENABLE ROW LEVEL SECURITY, а тайните сканирания търсят разкриване на ключ на услуга, преди да достигне до браузъра.
