Impact
Aanvallers kunnen de applicatielogica omzeilen om records in de database te lezen, bij te werken of te verwijderen als Row Level Security (RLS) niet correct wordt afgedwongen [S1]. Dit resulteert vaak in het blootstellen van persoonlijk identificeerbare informatie (PII) of gevoelige applicatiegegevens aan gebruikers die alleen toegang hebben tot de openbare anonieme API-sleutel.
Oorzaak
Supabase gebruikt Postgres Row Level Security om gegevenstoegang op databaseniveau te beheren, wat van fundamenteel belang is voor het beveiligen van gegevens [S1]. In een Next.js-omgeving moeten ontwikkelaars een Supabase-client maken die cookies en sessies correct verwerkt om de veiligheid te behouden tijdens server-side rendering [S2]. Kwetsbaarheden ontstaan doorgaans wanneer:
- Tabellen worden gemaakt zonder dat RLS is ingeschakeld, waardoor ze toegankelijk zijn via de openbare anon-sleutel [S1].
- De Supabase-client is verkeerd geconfigureerd in Next.js, waardoor gebruikersauthenticatietokens niet correct worden doorgegeven aan de database [S2].
- Ontwikkelaars gebruiken per ongeluk de sleutel
service_rolein code aan de clientzijde, waardoor alle RLS-beleidsregels [S1] worden omzeild.
Betonreparaties
- RLS inschakelen: Zorg ervoor dat beveiliging op rijniveau is ingeschakeld voor elke tabel in uw Supabase-database [S1].
- Beleid definiëren: Maak specifiek Postgres-beleid voor
SELECT,INSERT,UPDATEenDELETE-bewerkingen om de toegang te beperken op basis van de UID [S1] van de gebruiker. - Gebruik SSR-clients: Implementeer het
@supabase/ssr-pakket om clients te maken in Next.js die server-side authenticatie en sessiepersistentie [S2] correct beheren.
Hoe FixVibe erop test
FixVibe dekt dit al via geïmplementeerde app- en repo-controles. De passieve baas.supabase-rls-module ontdekt de Supabase-URL en anon-sleutelparen uit JavaScript-bundels van dezelfde oorsprong, vraagt PostgREST om metagegevens van openbare tabellen en voert beperkte alleen-lezen-selecties uit om anonieme gegevensblootstelling te bevestigen zonder klantgegevens te muteren. Repo-scans voeren ook repo.supabase.missing-rls uit om SQL-migraties te markeren die openbare tabellen maken zonder ENABLE ROW LEVEL SECURITY, en geheime scans zoeken naar blootstelling aan servicerolsleutels voordat deze de browser bereiken.
