FixVibe
Covered by FixVibehigh

Obehörig dataåtkomst via saknad Supabase Säkerhet på radnivå (RLS)

I Supabase-stödda applikationer bygger datasäkerhet på Row Level Security (RLS). Om RLS inte är explicit aktiverad och konfigurerad med policyer, kan alla användare med den offentliga anonyma nyckeln läsa, uppdatera eller radera data över hela databasen. Detta är särskilt viktigt i Next.js-miljöer där Supabase-klienten ofta initieras med en offentlig API-nyckel.

CWE-284

Inverkan

Underlåtenhet att implementera Row Level Security (RLS) tillåter oautentiserade angripare att fråga data från en Supabase-databas när offentliga tabeller exponeras genom den anon-gränsen [S1]. Eftersom Next.js-applikationer vanligtvis exponerar Supabase anon-nyckeln i kod på klientsidan, kan en angripare använda denna nyckel för att göra direkta REST API-anrop till databasen, förbigå den avsedda känsliga användarinformationen och komma åt den avsedda applikationslogiken. [S2].

Rotorsak

Som standard kräver Postgres-tabeller i Supabase explicit aktivering av Row Level Security för att förhindra offentlig åtkomst [S1]. När en utvecklare skapar en tabell men glömmer att aktivera RLS eller misslyckas med att definiera restriktiva policyer, kan databasen exponera data för alla som har projektets anon-nyckel [S1]. I Next.js-applikationer kräver rendering på serversidan och hämtning på klientsidan också noggrann Supabase-klientkonfiguration så att autentiserat användarkontext når databaslagret [S2].

Betongfixar

  • Aktivera RLS: Kör ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; för varje offentlig tabell som lagrar appdata [S1].
  • Definiera policyer: Skapa specifika policyer som begränsar åtkomst baserat på användarens autentiseringsstatus, till exempel CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Secure Server-Side Clients: När du använder Next.js, behåll servicerollklienter endast server och tillämpa fortfarande ägandefilter innan du returnerar data till användarna [S2].

Hur FixVibe testar det

FixVibe kör redan en skrivskyddad Supabase RLS-kontroll genom baas.supabase-rls. Skannern upptäcker Supabase-projektets URL och offentliga anonnyckel från JavaScript-paket med samma ursprung, ber PostgREST om offentlig tabellmetadata och försöker med begränsade skrivskyddade val för att bekräfta om data exponeras utan en användarsession. Den infogar, uppdaterar, tar inte bort eller använder tjänstrollreferenser. Repo-skanningar kan också fånga detta tidigare genom repo.supabase.missing-rls, som flaggar SQL-migreringar som skapar offentliga tabeller utan ENABLE ROW LEVEL SECURITY.