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_rolev 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,UPDATEinDELETEza 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.
