FixVibe
Covered by FixVibehigh

Неупълномощен достъп до данни чрез липсваща защита на ниво ред Supabase (RLS)

В приложения, поддържани от Supabase, сигурността на данните разчита на защита на ниво ред (RLS). Ако RLS не е изрично активиран и конфигуриран с правила, всеки потребител с публичния анонимен ключ може да чете, актуализира или изтрива данни в цялата база данни. Това е особено критично в Next.js среди, където клиентът Supabase често се инициализира с публичен API ключ.

CWE-284

Въздействие

Неуспешното внедряване на защита на ниво ред (RLS) позволява на неупълномощени нападатели да правят заявки за данни от Supabase база данни, когато публичните таблици са изложени през анонската граница [S1]. Тъй като приложенията на Next.js обикновено разкриват ключа Supabase anon в кода от страна на клиента, атакуващият може да използва този ключ, за да направи директни REST API извиквания към базата данни, заобикаляйки предвидената логика на приложението и осъществявайки достъп до чувствителна потребителска информация [S2].

Първопричина

По подразбиране таблиците на Postgres в Supabase изискват изрично активиране на сигурността на ниво ред, за да се предотврати обществен достъп [S1]. Когато разработчик създаде таблица, но забрави да активира RLS или не успее да дефинира ограничителни политики, базата данни може да изложи данни на всеки, който притежава anon ключа на проекта [S1]. В Next.js приложенията изобразяването от страна на сървъра и извличането от страна на клиента също изискват внимателна клиентска настройка на Supabase, така че удостовереният потребителски контекст да достигне до слоя база данни [S2].

Конкретни поправки

  • Активирайте RLS: Изпълнете ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; за всяка публична таблица, която съхранява данни на приложението [S1].
  • Дефиниране на правила: Създайте специфични правила, които ограничават достъпа въз основа на състоянието на удостоверяване на потребителя, като CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Защитени клиенти от страна на сървъра: Когато използвате Next.js, поддържайте клиентите с роля на услугата само сървърни и все още прилагайте филтри за собственост, преди да върнете данни на потребителите [S2].

Как FixVibe го тества

FixVibe вече изпълнява Supabase RLS проверка само за четене чрез baas.supabase-rls. Скенерът открива URL адреса на проекта Supabase и публичния анонен ключ от JavaScript пакети със същия произход, пита PostgREST за публични метаданни на таблицата и опитва ограничени селекции само за четене, за да потвърди дали данните са изложени без потребителска сесия. Той не вмъква, актуализира, изтрива или използва идентификационни данни за роля на услуга. Сканирането на репо също може да улови това по-рано чрез repo.supabase.missing-rls, който маркира SQL миграции, които създават публични таблици без ENABLE ROW LEVEL SECURITY.