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.
