FixVibe
Covered by FixVibehigh

Sikring av Next.js + Supabase: Forhindrer omgåelser av radnivåsikkerhet (RLS)

Applikasjoner bygget med Next.js og Supabase er ofte avhengige av Row Level Security (RLS) for å beskytte data. Unnlatelse av å aktivere RLS eller feilkonfigurering av Supabase-klienten kan føre til full databaseeksponering, slik at uautoriserte brukere kan lese eller endre sensitive poster.

CWE-284

Virkning

Angripere kan omgå applikasjonslogikk for å lese, oppdatere eller slette poster i databasen hvis Row Level Security (RLS) ikke håndheves riktig [S1]. Dette resulterer ofte i eksponering av personlig identifiserbar informasjon (PII) eller sensitiv applikasjonsdata til brukere som kun har tilgang til den offentlige anonyme API-nøkkelen.

Grunnårsak

Supabase bruker Postgres Row Level Security for å administrere datatilgang på databasenivå, noe som er grunnleggende for å sikre data [S1]. I et Next.js-miljø må utviklere opprette en Supabase-klient som korrekt håndterer informasjonskapsler og økter for å opprettholde sikkerheten under gjengivelse av [S2] på serversiden. Sårbarheter oppstår vanligvis når:

  • Tabeller opprettes uten RLS aktivert, noe som gjør dem tilgjengelige via den offentlige anonnøkkelen [S1].
  • Supabase-klienten er feilkonfigurert i Next.js, og klarer ikke å sende brukerautentiseringstokener til databasen [S2].
  • Utviklere bruker ved et uhell nøkkelen service_role i kode på klientsiden, som omgår alle RLS-policyer [S1].

Betongrettinger

  • Aktiver RLS: Sørg for at Row Level Security er aktivert for hver tabell i Supabase-databasen [S1].
  • Definer retningslinjer: Opprett spesifikke Postgres-policyer for SELECT, INSERT, UPDATE og DELETE-operasjoner for å begrense tilgang basert på brukerens UID ZXCVZVIXBETOKEN.
  • Bruk SSR-klienter: Implementer @supabase/ssr-pakken for å opprette klienter i Next.js som korrekt administrerer server-side-autentisering og øktpersistens [S2].

Hvordan FixVibe tester for det

FixVibe dekker allerede dette gjennom utplasserte apper og repo-sjekker. Den passive baas.supabase-rls-modulen oppdager Supabase URL- og anon-nøkkelpar fra JavaScript-bunter med samme opprinnelse, ber PostgREST om offentlige tabellmetadata og utfører begrensede skrivebeskyttede valg for å bekrefte anonym dataeksponering uten å mutere kundedata. Repo-skanninger kjører også repo.supabase.missing-rls for å flagge SQL-migreringer som skaper offentlige tabeller uten ENABLE ROW LEVEL SECURITY, og hemmelige skanninger ser etter tjenesterolle-nøkkeleksponering før den når nettleseren.