FixVibe
Covered by FixVibehigh

Jogosulatlan adathozzáférés hiányzó Supabase sorszintű biztonságon keresztül (RLS)

A Supabase által támogatott alkalmazásokban az adatbiztonság a sorszintű biztonságra (RLS) támaszkodik. Ha a RLS nincs kifejezetten engedélyezve és nincs házirendekkel konfigurálva, a nyilvános névtelen kulccsal rendelkező bármely felhasználó olvashatja, frissítheti vagy törölheti a teljes adatbázis adatait. Ez különösen kritikus Next.js környezetekben, ahol a Supabase klienst gyakran nyilvános API kulccsal inicializálják.

CWE-284

Hatás

A sorszintű biztonság (RLS) megvalósításának elmulasztása lehetővé teszi a hitelesítés nélküli támadók számára, hogy adatokat kérdezzenek le egy Supabase adatbázisból, amikor a nyilvános táblák a [S1] anon határon keresztül vannak kitéve. Mivel a Next.js alkalmazások jellemzően a Supabase anon kulcsot teszik ki az ügyféloldali kódban, a támadók ezzel a kulcssal közvetlenül REST API-t hajthatnak végre, valamint a felhasználói adatokhoz való hozzáférést az adatbázishoz, valamint az érzékeny alkalmazás-információk hívásait. [S2].

Kiváltó ok

Alapértelmezés szerint a Supabase Postgres tábláihoz a sorszintű biztonság kifejezett aktiválása szükséges a [S1] nyilvános hozzáférésének megakadályozása érdekében. Ha egy fejlesztő létrehoz egy táblát, de elfelejti engedélyezni a RLS-t, vagy nem definiál korlátozó házirendeket, az adatbázis bárkinek felfedheti az adatokat, aki rendelkezik a projekt anon [S1] kulcsával. A Next.js alkalmazásokban a kiszolgálóoldali megjelenítés és a kliensoldali lekérés is gondos Supabase ügyfélbeállítást igényel, hogy a hitelesített felhasználói kontextus elérje a [S2] adatbázisréteget.

Konkrét javítások

  • A RLS engedélyezése: A ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; végrehajtása minden nyilvános táblánál, amely a [S1] alkalmazásadatokat tárolja.
  • Határozzon meg házirendeket: Hozzon létre konkrét házirendeket, amelyek korlátozzák a hozzáférést a felhasználó hitelesítési állapota alapján, például: CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Biztonságos kiszolgálóoldali kliensek: A Next.js használatakor a szolgáltatási szerepkörű klienseket csak kiszolgálóként használja, és továbbra is alkalmazzon tulajdonosi szűrőket, mielőtt visszaküldi az adatokat a [S2] felhasználóknak.

Hogyan teszteli a FixVibe

A FixVibe már futtat egy írásvédett Supabase RLS ellenőrzést a baas.supabase-rls-n keresztül. A lapolvasó felfedezi a Supabase projekt URL-címét és a nyilvános anonkulcsot azonos eredetű JavaScript-kötegekből, nyilvános tábla metaadatokat kér a PostgREST-től, és megkísérli a korlátozott írásvédett kijelöléseket annak ellenőrzésére, hogy az adatok felhasználói munkamenet nélkül megjelennek-e. Nem illeszt be, frissít, nem töröl és nem használ szolgáltatási szerepkör hitelesítő adatokat. A repo-vizsgálatok ezt korábban is elkaphatják a repo.supabase.missing-rls-n keresztül, amely megjelöli az SQL-migrációkat, amelyek nyilvános táblákat hoznak létre ENABLE ROW LEVEL SECURITY nélkül.