FixVibe
Covered by FixVibehigh

Neoprávněný přístup k datům prostřednictvím chybějícího zabezpečení na úrovni řádků Supabase (RLS)

V aplikacích podporovaných Supabase se zabezpečení dat opírá o zabezpečení na úrovni řádků (RLS). Pokud RLS není explicitně povoleno a nakonfigurováno pomocí zásad, každý uživatel s veřejným anonymním klíčem může číst, aktualizovat nebo mazat data v celé databázi. To je zvláště důležité v prostředích Next.js, kde je klient Supabase často inicializován pomocí veřejného klíče API.

CWE-284

Dopad

Selhání implementace zabezpečení na úrovni řádků (RLS) umožňuje neověřeným útočníkům dotazovat se na data z databáze Supabase, když jsou veřejné tabulky vystaveny přes anon hranici [S1]. Vzhledem k tomu, že aplikace Next.js obvykle odhalují klíč Supabase anon v kódu na straně klienta, útočník může tento klíč použít k přímému REST API volání zamýšlené uživatelské logiky a obcházení logiky přístupu k databázi. [S2].

Hlavní příčina

Ve výchozím nastavení vyžadují tabulky Postgres v Supabase explicitní aktivaci zabezpečení na úrovni řádků, aby se zabránilo veřejnému přístupu [S1]. Když vývojář vytvoří tabulku, ale zapomene povolit RLS nebo nedokáže definovat omezující zásady, databáze může zpřístupnit data komukoli, kdo vlastní klíč projektu anon [S1]. V aplikacích Next.js vyžaduje vykreslování na straně serveru a načítání na straně klienta pečlivé nastavení klienta Supabase, aby kontext ověřeného uživatele dosáhl databázové vrstvy [S2].

Opravy betonu

  • Povolit RLS: Spustit ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; pro každou veřejnou tabulku, která ukládá data aplikací [S1].
  • Definujte zásady: Vytvořte konkrétní zásady, které omezují přístup na základě stavu ověření uživatele, jako je CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Zabezpečení klienti na straně serveru: Při používání Next.js ponechte klienty s rolí služby pouze jako server a před vrácením dat uživatelům [S2] aplikujte filtry vlastnictví.

Jak to testuje FixVibe

FixVibe již spouští kontrolu Supabase pouze pro čtení RLS prostřednictvím baas.supabase-rls. Skener zjistí adresu URL projektu Supabase a veřejný anon klíč z balíčků JavaScriptu stejného původu, požádá PostgREST o metadata veřejné tabulky a pokusí se o omezené výběry pouze pro čtení, aby potvrdil, zda jsou data vystavena bez uživatelské relace. Nevkládá, neaktualizuje, neodstraňuje ani nepoužívá přihlašovací údaje servisní role. Repo skenování to může také zachytit dříve prostřednictvím repo.supabase.missing-rls, který označí migrace SQL, které vytvářejí veřejné tabulky bez ENABLE ROW LEVEL SECURITY.