FixVibe
Covered by FixVibehigh

Uautorisert datatilgang via manglende Supabase Row Level Security (RLS)

I Supabase-støttede applikasjoner er datasikkerhet avhengig av Row Level Security (RLS). Hvis RLS ikke er eksplisitt aktivert og konfigurert med policyer, kan enhver bruker med den offentlige anonyme nøkkelen lese, oppdatere eller slette data på tvers av hele databasen. Dette er spesielt kritisk i Next.js-miljøer der Supabase-klienten ofte initialiseres med en offentlig API-nøkkel.

CWE-284

Virkning

Unnlatelse av å implementere Row Level Security (RLS) tillater uautentiserte angripere å spørre etter data fra en Supabase-database når offentlige tabeller blir eksponert gjennom den anoniserte grensen [S1]. Fordi Next.js-applikasjoner vanligvis eksponerer Supabase anon-nøkkelen i kode på klientsiden, kan en angriper bruke denne nøkkelen til å foreta direkte REST API-anrop til databasen, og omgå den tiltenkte applikasjonssensitive brukerinformasjonen [S2].

Grunnårsak

Som standard krever Postgres-tabeller i Supabase eksplisitt aktivering av Row Level Security for å forhindre offentlig tilgang [S1]. Når en utvikler oppretter en tabell, men glemmer å aktivere RLS eller ikke klarer å definere restriktive retningslinjer, kan databasen eksponere data for alle som har prosjektets anon-nøkkel [S1]. I Next.js-applikasjoner krever gjengivelse på serversiden og henting på klientsiden også nøye Supabase-klientoppsett slik at autentisert brukerkontekst når databaselaget [S2].

Betongrettinger

  • Aktiver RLS: Kjør ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; for hver offentlige tabell som lagrer appdata [S1].
  • Definer retningslinjer: Lag spesifikke retningslinjer som begrenser tilgang basert på brukerens autentiseringsstatus, for eksempel CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Sikre klienter på serversiden: Når du bruker Next.js, behold tjenesterolleklienter kun på server og fortsatt bruk eierskapsfiltre før du returnerer data til brukere [S2].

Hvordan FixVibe tester for det

FixVibe kjører allerede en skrivebeskyttet Supabase RLS-sjekk gjennom baas.supabase-rls. Skanneren oppdager Supabase-prosjektets URL og offentlig anonnøkkel fra JavaScript-bunter med samme opprinnelse, ber PostgREST om offentlige tabellmetadata, og forsøker begrensede skrivebeskyttede valg for å bekrefte om data er eksponert uten en brukerøkt. Den setter ikke inn, oppdaterer, sletter eller bruker påloggingsinformasjon for tjenesterolle. Repo-skanninger kan også fange dette tidligere gjennom repo.supabase.missing-rls, som flagger SQL-migreringer som lager offentlige tabeller uten ENABLE ROW LEVEL SECURITY.