FixVibe
Covered by FixVibehigh

Ongeautoriseerde gegevenstoegang via ontbrekende Supabase-beveiliging op rijniveau (RLS)

In door Supabase ondersteunde applicaties is de gegevensbeveiliging afhankelijk van Row Level Security (RLS). Als RLS niet expliciet is ingeschakeld en geconfigureerd met beleid, kan elke gebruiker met de openbare anonieme sleutel gegevens in de hele database lezen, bijwerken of verwijderen. Dit is met name van cruciaal belang in Next.js-omgevingen waar de Supabase-client vaak wordt geïnitialiseerd met een openbare API-sleutel.

CWE-284

Impact

Als er geen Row Level Security (RLS) wordt geïmplementeerd, kunnen niet-geverifieerde aanvallers gegevens opvragen uit een Supabase-database wanneer openbare tabellen worden weergegeven via de anon-grens [S1]. Omdat Next.js-applicaties doorgaans de Supabase anon-sleutel in client-side code vrijgeven, kan een aanvaller deze sleutel gebruiken om directe REST API-oproepen naar de database te maken, waardoor de beoogde applicatielogica wordt omzeild en toegang wordt verkregen tot gevoelige gebruikersinformatie [S2].

Oorzaak

Standaard vereisen Postgres-tabellen in Supabase expliciete activering van Row Level Security om openbare toegang tot [S1] te voorkomen. Wanneer een ontwikkelaar een tabel maakt maar vergeet RLS in te schakelen of er niet in slaagt beperkend beleid te definiëren, kan de database gegevens vrijgeven aan iedereen die in het bezit is van de anon-sleutel [S1] van het project. In Next.js-toepassingen vereisen server-side rendering en client-side fetching ook een zorgvuldige Supabase-clientconfiguratie, zodat de geverifieerde gebruikerscontext de databaselaag [S2] bereikt.

Betonreparaties

  • RLS inschakelen: Voer ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; uit voor elke openbare tabel waarin app-gegevens [S1] zijn opgeslagen.
  • Beleid definiëren: Maak specifiek beleid dat de toegang beperkt op basis van de authenticatiestatus van de gebruiker, zoals CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Beveiligde clients aan de serverzijde: Wanneer u Next.js gebruikt, zorg er dan voor dat clients met servicerol alleen op de server staan en pas nog steeds eigendomsfilters toe voordat gegevens worden geretourneerd aan gebruikers [S2].

Hoe FixVibe erop test

FixVibe voert al een alleen-lezen Supabase RLS-controle uit via baas.supabase-rls. De scanner ontdekt de Supabase-project-URL en de openbare anon-sleutel uit JavaScript-bundels van dezelfde oorsprong, vraagt ​​PostgREST om metagegevens van de openbare tabel en probeert beperkte alleen-lezen selecties om te bevestigen of gegevens worden vrijgegeven zonder een gebruikerssessie. Er worden geen servicerolreferenties ingevoegd, bijgewerkt, verwijderd of gebruikt. Repo-scans kunnen dit ook eerder onderkennen via repo.supabase.missing-rls, dat SQL-migraties markeert die openbare tabellen creëren zonder ENABLE ROW LEVEL SECURITY.