FixVibe
Covered by FixVibehigh

Acces neautorizat la date prin securitatea la nivel de rând Supabase (RLS)

În aplicațiile susținute de Supabase, securitatea datelor se bazează pe securitatea la nivel de rând (RLS). Dacă RLS nu este activat și configurat în mod explicit cu politici, orice utilizator cu cheia publică anonimă poate citi, actualiza sau șterge datele din întreaga bază de date. Acest lucru este deosebit de critic în mediile Next.js în care clientul Supabase este adesea inițializat cu o cheie publică API.

CWE-284

Impact

Eșecul implementării Securității la nivel de rând (RLS) permite atacatorilor neautentificați să interogheze date dintr-o bază de date Supabase atunci când tabelele publice sunt expuse prin limita anon [S1]. Deoarece aplicațiile Next.js expun de obicei cheia Supabase anon în codul clientului, un atacator poate folosi această cheie pentru a face REST direct [S2].

Cauza fundamentală

În mod implicit, tabelele Postgres din Supabase necesită activarea explicită a Securității la nivel de rând pentru a preveni accesul public [S1]. Când un dezvoltator creează un tabel, dar uită să activeze RLS sau nu reușește să definească politici restrictive, baza de date poate expune date oricui deține cheia anon [S1] a proiectului. În aplicațiile Next.js, randarea pe server și preluarea pe partea client necesită, de asemenea, o configurare atentă a clientului Supabase, astfel încât contextul utilizatorului autentificat să ajungă la nivelul bazei de date [S2].

Remedieri concrete

  • Activați RLS: Executați ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; pentru fiecare tabel public care stochează datele aplicației [S1].
  • Definiți politici: Creați politici specifice care restricționează accesul pe baza stării de autentificare a utilizatorului, cum ar fi CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Clienți securizați pe server: Când utilizați Next.js, păstrați clienții cu rol de serviciu doar pentru server și aplicați în continuare filtre de proprietate înainte de a returna datele utilizatorilor [S2].

Cum testează FixVibe pentru aceasta

FixVibe rulează deja o verificare numai în citire Supabase RLS prin baas.supabase-rls. Scanerul descoperă adresa URL a proiectului Supabase și cheia publică anonimă din pachetele JavaScript de aceeași origine, solicită PostgREST metadatele publice ale tabelului și încearcă selecții limitate doar pentru citire pentru a confirma dacă datele sunt expuse fără o sesiune de utilizator. Nu inserează, actualizează, șterge și nu utilizează acreditările pentru rol de serviciu. Scanările repo pot surprinde acest lucru mai devreme prin repo.supabase.missing-rls, care semnalează migrațiile SQL care creează tabele publice fără ENABLE ROW LEVEL SECURITY.