Dopad
Útočníci mohou obejít aplikační logiku a číst, aktualizovat nebo odstraňovat záznamy v databázi, pokud není řádně vynuceno zabezpečení na úrovni řádků (RLS) [S1]. To často vede k vystavení osobních údajů (PII) nebo citlivých dat aplikací uživatelům, kteří mají přístup pouze k veřejnému anonymnímu klíči API.
Hlavní příčina
Supabase používá Postgres Row Level Security ke správě přístupu k datům na úrovni databáze, což je zásadní pro zabezpečení dat [S1]. V prostředí Next.js musí vývojáři vytvořit klienta Supabase, který správně zpracovává soubory cookie a relace, aby byla zachována bezpečnost během vykreslování na straně serveru [S2]. Zranitelnosti obvykle vznikají, když:
- Tabulky se vytvářejí bez povoleného RLS, takže jsou přístupné prostřednictvím veřejného anon klíče [S1].
- Klient Supabase je nesprávně nakonfigurován v Next.js, protože se nepodařilo správně předat tokeny autentizace uživatele do databáze [S2].
- Vývojáři omylem použijí klíč
service_rolev kódu na straně klienta, který obchází všechny zásady RLS [S1].
Opravy betonu
- Povolte RLS: Zajistěte, aby bylo pro každou tabulku ve vaší databázi Supabase [S1] povoleno zabezpečení na úrovni řádků.
- Definujte zásady: Vytvořte konkrétní zásady Postgresu pro operace
SELECT,INSERT,UPDATEaDELETE, abyste omezili přístup na základě ZXZCVEN4UIDOKVIOKVID uživatele. - Použijte klienty SSR: Implementujte balíček
@supabase/ssrk vytvoření klientů v Next.js, kteří správně spravují ověřování na straně serveru a perzistenci relace [S2].
Jak to testuje FixVibe
FixVibe to již pokrývá prostřednictvím kontrol nasazených aplikací a repo. Pasivní modul baas.supabase-rls zjišťuje páry URL Supabase Supabase z balíčků JavaScriptu stejného původu, žádá PostgREST o metadata veřejných tabulek a provádí omezené výběry pouze pro čtení, aby potvrdil vystavení anonymních dat bez mutování zákaznických dat. Repo skenování také spouští repo.supabase.missing-rls k označení migrací SQL, které vytvářejí veřejné tabulky bez ENABLE ROW LEVEL SECURITY, a tajné skenování hledá odhalení klíče servisní role předtím, než se dostane do prohlížeče.
