FixVibe
Covered by FixVibehigh

Qasje e paautorizuar e të dhënave përmes nivelit të sigurisë së rreshtit Supabase që mungon (RLS)

Në aplikacionet e mbështetura nga Supabase, siguria e të dhënave mbështetet në sigurinë e nivelit të rreshtit (RLS). Nëse RLS nuk është aktivizuar dhe konfiguruar në mënyrë eksplicite me politika, çdo përdorues me çelësin publik anonim mund të lexojë, përditësojë ose fshijë të dhënat në të gjithë bazën e të dhënave. Kjo është veçanërisht e rëndësishme në mjediset Next.js ku klienti Supabase shpesh inicializohet me një çelës publik API.

CWE-284

Ndikimi

Dështimi për të zbatuar sigurinë e nivelit të rreshtit (RLS) i lejon sulmuesit e paautentikuar të kërkojnë të dhëna nga një bazë të dhënash Supabase kur tabelat publike ekspozohen përmes kufirit anon [S1]. Për shkak se aplikacionet Next.js zakonisht ekspozojnë çelësin Supabase anon në kodin e klientit, një sulmues mund ta përdorë këtë çelës për të bërë thirrje të drejtpërdrejta të REST API duke kaluar në informacionin e synuar të përdoruesit në bazën e të dhënave, duke kaluar në informacionin e synuar të aplikacionit. [S2].

Shkaku rrënjësor

Si parazgjedhje, tabelat Postgres në Supabase kërkojnë aktivizimin e qartë të Sigurisë së Nivelit të Rreshtit për të parandaluar aksesin publik [S1]. Kur një zhvillues krijon një tabelë, por harron të aktivizojë RLS ose nuk arrin të përcaktojë politika kufizuese, baza e të dhënave mund t'i ekspozojë të dhënat kujtdo që zotëron çelësin anon të projektit [S1]. Në aplikacionet Next.js, interpretimi nga ana e serverit dhe tërheqja nga ana e klientit kërkojnë gjithashtu konfigurim të kujdesshëm të klientit Supabase, në mënyrë që konteksti i autentifikuar i përdoruesit të arrijë në shtresën e bazës së të dhënave [S2].

Rregullime konkrete

  • Aktivizo RLS: Ekzekuto ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; për çdo tabelë publike që ruan të dhënat e aplikacionit [S1].
  • Përcaktoni politikat: Krijoni politika specifike që kufizojnë aksesin bazuar në statusin e vërtetimit të përdoruesit, si CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Klientë të sigurt nga ana e serverit: Kur përdorni Next.js, mbani shërbimin e klientëve vetëm për serverin dhe ende aplikoni filtrat e pronësisë përpara se t'u ktheni të dhënat përdoruesve [S2].

Si e teston FixVibe për të

FixVibe tashmë ekzekuton një kontroll Supabase RLS vetëm për lexim përmes baas.supabase-rls. Skaneri zbulon URL-në e projektit Supabase dhe çelësin anon publik nga paketat JavaScript me origjinë të njëjtë, kërkon PostgREST për meta të dhënat publike të tabelës dhe përpiqet të zgjedhë vetëm lexim të kufizuar për të konfirmuar nëse të dhënat ekspozohen pa një sesion përdoruesi. Ai nuk fut, përditëson, fshin ose përdor kredencialet e rolit të shërbimit. Skanimet e repove mund ta kapin këtë edhe më herët përmes repo.supabase.missing-rls, i cili shënon migrimet SQL që krijojnë tabela publike pa ENABLE ROW LEVEL SECURITY.