FixVibe
Covered by FixVibehigh

Защита на Next.js + Supabase: Предотвратяване на заобикаляне на сигурността на ниво ред (RLS)

Приложенията, изградени с Next.js и Supabase, често разчитат на защита на ниво ред (RLS) за защита на данните. Неуспешното активиране на RLS или неправилното конфигуриране на клиента Supabase може да доведе до пълно разкриване на базата данни, което позволява на неоторизирани потребители да четат или променят чувствителни записи.

CWE-284

Въздействие

Нападателите могат да заобиколят логиката на приложението, за да прочетат, актуализират или изтрият записи в базата данни, ако защитата на ниво ред (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, а тайните сканирания търсят разкриване на ключ на услуга, преди да достигне до браузъра.