FixVibe
Covered by FixVibehigh

Zaščita Next.js + Supabase: Preprečevanje varnosti na ravni vrstice (RLS) obide

Aplikacije, izdelane z Next.js in Supabase, se za zaščito podatkov pogosto zanašajo na varnost na ravni vrstice (RLS). Če RLS ne omogočite ali napačno konfigurirate odjemalca Supabase, lahko pride do popolne izpostavljenosti baze podatkov, kar nepooblaščenim uporabnikom omogoči branje ali spreminjanje občutljivih zapisov.

CWE-284

Vpliv

Napadalci lahko obidejo logiko aplikacije za branje, posodobitev ali brisanje zapisov v zbirki podatkov, če varnost na ravni vrstice (RLS) ni pravilno uveljavljena [S1]. Posledica tega je pogosto izpostavljenost osebno prepoznavnim podatkom (PII) ali občutljivim podatkovam aplikacij uporabnikom, ki imajo dostop samo do javnega anonimnega ključa API.

Temeljni vzrok

Supabase uporablja Postgres Row Level Security za upravljanje dostopa do podatkov na ravni baze podatkov, kar je temeljnega pomena za varovanje podatkov [S1]. V okolju Next.js morajo razvijalci ustvariti odjemalca Supabase, ki pravilno obravnava piškotke in seje, da ohrani varnost med upodabljanjem [S2] na strani strežnika. Ranljivosti se običajno pojavijo, ko:

  • Tabele so ustvarjene brez omogočenega RLS, zaradi česar so dostopne prek javnega anonimnega ključa [S1].
  • Odjemalec Supabase je napačno konfiguriran v Next.js in ne uspe pravilno posredovati žetonov za preverjanje pristnosti uporabnika v bazo podatkov [S2].
  • Razvijalci pomotoma uporabijo ključ service_role v kodi na strani odjemalca, ki zaobide vse pravilnike RLS [S1].

Betonski popravki

  • Omogoči RLS: zagotovite, da je varnost na ravni vrstice omogočena za vsako tabelo v vaši zbirki podatkov Supabase [S1].
  • Določite pravilnike: Ustvarite posebne pravilnike Postgres za operacije SELECT, INSERT, UPDATE in DELETE za omejitev dostopa na podlagi uporabnikovega UID-ja [S1].
  • Uporabite odjemalce SSR: Implementirajte paket @supabase/ssr, da ustvarite odjemalce v Next.js, ki pravilno upravljajo preverjanje pristnosti na strani strežnika in obstojnost seje [S2].

Kako ga FixVibe testira

FixVibe to že pokriva s pregledi razporejenih aplikacij in repo. Pasivni modul baas.supabase-rls odkrije pare URL-jev Supabase in neključnih ključev iz svežnjev JavaScript istega izvora, vpraša PostgREST za metapodatke javne tabele in izvede omejene izbire samo za branje, da potrdi izpostavljenost anonimnih podatkov brez spreminjanja podatkov o strankah. Repo pregledi izvajajo tudi repo.supabase.missing-rls za označevanje selitev SQL, ki ustvarjajo javne tabele brez ENABLE ROW LEVEL SECURITY, tajni pregledi pa iščejo izpostavljenost ključa vloge storitve, preden doseže brskalnik.