FixVibe
Covered by FixVibehigh

Zabezpečení Next.js + Supabase: Prevence obcházení zabezpečení na úrovni řádků (RLS)

Aplikace vytvořené pomocí Next.js a Supabase často spoléhají na ochranu dat na úrovni řádků (RLS). Selhání aktivace RLS nebo nesprávná konfigurace klienta Supabase může vést k úplnému odhalení databáze a umožnit neoprávněným uživatelům číst nebo upravovat citlivé záznamy.

CWE-284

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_role v 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, UPDATE a DELETE, abyste omezili přístup na základě ZXZCVEN4UIDOKVIOKVID uživatele.
  • Použijte klienty SSR: Implementujte balíček @supabase/ssr k 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.