Impact
Atacatorii pot ocoli logica aplicației pentru a citi, actualiza sau șterge înregistrările din baza de date dacă securitatea la nivel de rând (RLS) nu este aplicată corect [S1]. Acest lucru duce adesea la expunerea informațiilor de identificare personală (PII) sau a datelor sensibile ale aplicațiilor către utilizatorii care au acces doar la cheia publică anonimă API.
Cauza fundamentală
Supabase utilizează Postgres Row Level Security pentru a gestiona accesul la date la nivel de bază de date, care este fundamental pentru securizarea datelor [S1]. Într-un mediu Next.js, dezvoltatorii trebuie să creeze un client Supabase care gestionează corect cookie-urile și sesiunile pentru a menține securitatea în timpul redării pe server [S2]. Vulnerabilitățile apar de obicei atunci când:
- Tabelele sunt create fără RLS activat, făcându-le accesibile prin cheia publică anonimă [S1].
- Clientul Supabase este configurat greșit în Next.js, nereușind să transmită corect jetoanele de autentificare a utilizatorului în baza de date [S2].
- Dezvoltatorii folosesc accidental cheia
service_roleîn codul clientului, care ocolește toate politicile RLS [S1].
Remedieri concrete
- Activați RLS: Asigurați-vă că securitatea la nivel de rând este activată pentru fiecare tabel din baza de date Supabase [S1].
- Definiți politici: Creați politici Postgres specifice pentru operațiunile
SELECT,INSERT,UPDATEșiDELETEpentru a restricționa accesul pe baza utilizatoruluiUPDATE4 - Utilizați clienți SSR: Implementați pachetul
@supabase/ssrpentru a crea clienți în Next.js care gestionează corect autentificarea pe server și persistența sesiunii [S2].
Cum testează FixVibe pentru aceasta
FixVibe acoperă deja acest lucru prin verificări ale aplicației implementate și repo. Modulul pasiv baas.supabase-rls descoperă URL-ul Supabase și perechile de chei anonime din pachetele JavaScript de aceeași origine, solicită PostgREST metadatele publice ale tabelului și efectuează selecții limitate doar pentru citire pentru a confirma expunerea datelor anonime fără a modifica datele clienților. Scanările repo rulează, de asemenea, repo.supabase.missing-rls pentru a semnala migrațiile SQL care creează tabele publice fără ENABLE ROW LEVEL SECURITY, iar scanările secrete caută expunerea cheii rolului de serviciu înainte de a ajunge în browser.
