FixVibe
Covered by FixVibehigh

Neovlašteni pristup podacima putem nedostajuće Supabase sigurnosti na nivou reda (RLS)

U aplikacijama koje podržavaju Supabase, sigurnost podataka se oslanja na sigurnost na razini reda (RLS). Ako RLS nije eksplicitno omogućen i konfiguriran s politikama, svaki korisnik s javnim anonimnim ključem može čitati, ažurirati ili brisati podatke u cijeloj bazi podataka. Ovo je posebno kritično u Next.js okruženjima gdje se Supabase klijent često inicijalizira s javnim ključem API.

CWE-284

Impact

Neuspjeh implementacije sigurnosti na razini reda (RLS) dozvoljava neautoriziranim napadačima da traže podatke iz Supabase baze podataka kada su javne tablice izložene preko anonimne granice [S1]. Budući da aplikacije Next.js tipično izlažu Supabase anon ključ u kodu na strani klijenta, napadač može koristiti ovaj ključ da napravi direktan REST API pozivajući se na korisničku bazu podataka putem logičkih poziva na željenu bazu podataka. [S2].

Osnovni uzrok

Po defaultu, Postgres tabele u Supabase zahtijevaju eksplicitnu aktivaciju sigurnosti na nivou reda kako bi se spriječio javni pristup [S1]. Kada programer kreira tablicu, ali zaboravi omogućiti RLS ili ne uspije definirati restriktivne politike, baza podataka može izložiti podatke svima koji posjeduju projektni ključ anon [S1]. U Next.js aplikacijama, prikazivanje na strani servera i dohvaćanje na strani klijenta također zahtijevaju pažljivo podešavanje klijenta Supabase tako da autentificirani korisnički kontekst doseže sloj baze podataka [S2].

Betonski popravci

  • Omogući RLS: Izvrši ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; za svaku javnu tabelu koja pohranjuje podatke aplikacije [S1].
  • Definirajte politike: Kreirajte specifične politike koje ograničavaju pristup na osnovu statusa provjere autentičnosti korisnika, kao što je CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Sigurni klijenti na strani servera: Kada koristite Next.js, zadržite klijente sa ulogom usluge samo za server i još uvijek primijenite filtere vlasništva prije vraćanja podataka korisnicima [S2].

Kako FixVibe testira za to

FixVibe već pokreće provjeru samo za čitanje Supabase RLS kroz baas.supabase-rls. Skener otkriva URL projekta Supabase i javni anonimni ključ iz JavaScript paketa istog porijekla, traži od PostgREST-a metapodatke javne tablice i pokušava ograničeno odabire samo za čitanje da potvrdi da li su podaci izloženi bez korisničke sesije. Ne umeće, ažurira, ne briše niti koristi vjerodajnice za ulogu usluge. Repo skeniranja također mogu uhvatiti ovo ranije putem repo.supabase.missing-rls, koji označava SQL migracije koje kreiraju javne tablice bez ENABLE ROW LEVEL SECURITY.