FixVibe
Covered by FixVibehigh

Neoprávnený prístup k údajom prostredníctvom chýbajúceho zabezpečenia Supabase na úrovni riadkov (RLS)

V aplikáciách podporovaných Supabase sa bezpečnosť údajov spolieha na zabezpečenie na úrovni riadkov (RLS). Ak RLS nie je explicitne povolené a nakonfigurované pomocou politík, každý používateľ s verejným anonymným kľúčom môže čítať, aktualizovať alebo odstraňovať údaje v celej databáze. Toto je obzvlášť dôležité v prostrediach Next.js, kde sa klient Supabase často inicializuje pomocou verejného kľúča API.

CWE-284

Vplyv

Zlyhanie pri implementácii zabezpečenia na úrovni riadkov (RLS) umožňuje neovereným útočníkom vyhľadávať údaje z databázy Supabase, keď sú verejné tabuľky vystavené cez anon hranicu [S1]. Pretože aplikácie Next.js zvyčajne odhaľujú kľúč Supabase anon v kóde na strane klienta, útočník môže použiť tento kľúč na priame REST API volaniami zamýšľanej aplikácie do logiky prístupu a obísť ich logiku. [S2].

Hlavná príčina

V predvolenom nastavení vyžadujú tabuľky Postgres v Supabase explicitnú aktiváciu zabezpečenia na úrovni riadkov, aby sa zabránilo verejnému prístupu [S1]. Keď vývojár vytvorí tabuľku, ale zabudne povoliť RLS alebo nedokáže definovať reštriktívne politiky, databáza môže sprístupniť údaje komukoľvek, kto vlastní kľúč projektu anon [S1]. V aplikáciách Next.js si vykresľovanie na strane servera a načítanie na strane klienta tiež vyžaduje starostlivé nastavenie klienta Supabase, aby sa kontext overeného používateľa dostal do databázovej vrstvy [S2].

Opravy betónu

  • Povoliť RLS: Vykonajte ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; pre každú verejnú tabuľku, v ktorej sú uložené údaje aplikácie [S1].
  • Definujte politiky: Vytvorte špecifické politiky, ktoré obmedzujú prístup na základe stavu overenia používateľa, ako napríklad CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Bezpeční klienti na strane servera: Keď používate Next.js, ponechajte klientov s rolou služby len server a pred vrátením údajov používateľom [S2] stále používajte filtre vlastníctva.

Ako to testuje FixVibe

FixVibe už spúšťa kontrolu Supabase RLS iba na čítanie cez baas.supabase-rls. Skener zistí adresu URL projektu Supabase a verejný anon kľúč zo zväzkov JavaScript rovnakého pôvodu, požiada PostgREST o verejné metadáta tabuľky a pokúsi sa o obmedzené výbery iba na čítanie, aby potvrdil, či sú údaje vystavené bez relácie používateľa. Nevkladá, neaktualizuje, neodstraňuje ani nepoužíva poverenia servisnej role. Repo skeny to dokážu zachytiť aj skôr prostredníctvom repo.supabase.missing-rls, ktorý označí migrácie SQL, ktoré vytvárajú verejné tabuľky bez ENABLE ROW LEVEL SECURITY.