FixVibe
Covered by FixVibehigh

Nepooblaščen dostop do podatkov prek manjkajoče varnosti na ravni vrstice Supabase (RLS)

V aplikacijah, ki podpirajo Supabase, varnost podatkov temelji na varnosti na ravni vrstice (RLS). Če RLS ni izrecno omogočen in konfiguriran s pravilniki, lahko vsak uporabnik z javnim anonimnim ključem bere, posodablja ali briše podatke v celotni bazi podatkov. To je še posebej kritično v okoljih Next.js, kjer je odjemalec Supabase pogosto inicializiran z javnim ključem API.

CWE-284

Vpliv

Neizvedba varnosti na ravni vrstice (RLS) omogoča neoverjenim napadalcem, da poizvedujejo po podatkih iz zbirke podatkov Supabase, ko so javne tabele izpostavljene prek nenavadne meje [S1]. Ker aplikacije Next.js običajno razkrijejo ključ Supabase anon v kodi na strani odjemalca, lahko napadalec uporabi ta ključ za neposredne klice REST API v bazo podatkov, mimo predvidene logike aplikacije in dostopa do občutljivih uporabniških informacij. [S2].

Temeljni vzrok

Tabele Postgres v Supabase privzeto zahtevajo eksplicitno aktiviranje varnosti na ravni vrstice, da se prepreči javni dostop [S1]. Ko razvijalec ustvari tabelo, vendar pozabi omogočiti RLS ali ne uspe definirati omejevalnih pravilnikov, lahko baza podatkov razkrije podatke vsem, ki imajo projektni ključ anon [S1]. V aplikacijah Next.js upodabljanje na strani strežnika in pridobivanje na strani odjemalca prav tako zahtevata skrbno nastavitev odjemalca Supabase, tako da kontekst preverjenega uporabnika doseže sloj baze podatkov [S2].

Betonski popravki

  • Omogoči RLS: Izvedite ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; za vsako javno tabelo, ki shranjuje podatke aplikacije [S1].
  • Določite pravilnike: Ustvarite posebne pravilnike, ki omejujejo dostop na podlagi statusa preverjanja pristnosti uporabnika, kot je CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Zaščite odjemalce na strani strežnika: Ko uporabljate Next.js, naj bodo odjemalci storitvene vloge samo strežniki in še vedno uporabite filtre lastništva, preden vrnete podatke uporabnikom [S2].

Kako ga FixVibe testira

FixVibe že izvaja preverjanje Supabase RLS samo za branje prek baas.supabase-rls. Optični bralnik odkrije URL projekta Supabase in javni anon ključ iz svežnjev JavaScript istega izvora, vpraša PostgREST za metapodatke javne tabele in poskusi z omejeno izbiro samo za branje, da potrdi, ali so podatki izpostavljeni brez uporabniške seje. Ne vstavlja, posodablja, briše ali uporablja poverilnic storitvene vloge. Repo pregledi lahko to tudi prej ujamejo prek repo.supabase.missing-rls, ki označi selitve SQL, ki ustvarjajo javne tabele brez ENABLE ROW LEVEL SECURITY.