FixVibe
Covered by FixVibehigh

Zabezpečenie Next.js + Supabase: Zabránenie obchádzania zabezpečenia na úrovni riadkov (RLS)

Aplikácie vytvorené pomocou Next.js a Supabase sa pri ochrane údajov často spoliehajú na zabezpečenie na úrovni riadkov (RLS). Zlyhanie pri povolení RLS alebo nesprávna konfigurácia klienta Supabase môže viesť k úplnému odhaleniu databázy, čo umožní neoprávneným používateľom čítať alebo upravovať citlivé záznamy.

CWE-284

Vplyv

Útočníci môžu obísť aplikačnú logiku na čítanie, aktualizáciu alebo vymazanie záznamov v databáze, ak nie je správne vynútené zabezpečenie na úrovni riadkov (RLS) [S1]. To často vedie k vystaveniu osobných údajov (PII) alebo citlivých údajov aplikácií používateľom, ktorí majú prístup len k verejnému anonymnému kľúču API.

Hlavná príčina

Supabase používa Postgres Row Level Security na riadenie prístupu k údajom na úrovni databázy, čo je základom pre zabezpečenie údajov [S1]. V prostredí Next.js musia vývojári vytvoriť klienta Supabase, ktorý správne spracováva súbory cookie a relácie, aby sa zachovala bezpečnosť počas vykresľovania na strane servera [S2]. Zraniteľnosť sa zvyčajne vyskytuje, keď:

  • Tabuľky sa vytvárajú bez zapnutia RLS, vďaka čomu sú prístupné prostredníctvom verejného anon kľúča [S1].
  • Klient Supabase je nesprávne nakonfigurovaný v Next.js, pretože nedokáže správne odovzdať tokeny autentifikácie užívateľa do databázy [S2].
  • Vývojári omylom používajú kľúč service_role v kóde na strane klienta, ktorý obchádza všetky zásady RLS [S1].

Opravy betónu

  • Povoliť RLS: Zabezpečte, aby bola pre každú tabuľku vo vašej databáze Supabase [S1] povolená bezpečnosť na úrovni riadkov.
  • Definujte pravidlá: Vytvorte špecifické pravidlá Postgres pre operácie SELECT, INSERT, UPDATE a DELETE na obmedzenie prístupu na základe ZXZCVIX UIDXZCVIX UIDXZCVIX UIDXZCVIX UID.
  • Použite klientov SSR: Implementujte balík @supabase/ssr na vytváranie klientov v Next.js, ktorí správne spravujú autentifikáciu na strane servera a perzistenciu relácie [S2].

Ako to testuje FixVibe

FixVibe to už pokrýva prostredníctvom nasadených aplikácií a kontrol repo. Pasívny modul baas.supabase-rls zisťuje Supabase páry adries URL a anonkey zo zväzkov JavaScript rovnakého pôvodu, žiada PostgREST o verejné metadáta tabuľky a vykonáva obmedzené výbery iba na čítanie na potvrdenie vystavenia anonymných údajov bez zmeny údajov o zákazníkoch. Repo skeny tiež spúšťajú repo.supabase.missing-rls na označenie migrácií SQL, ktoré vytvárajú verejné tabuľky bez ENABLE ROW LEVEL SECURITY, a tajné skenovania hľadajú odhalenie kľúča servisnej role predtým, ako sa dostane do prehliadača.