Vplyv
Útočníci môžu obísť aplikačnú logiku na čítanie, aktualizáciu alebo vymazanie záznamov v databáze, ak nie je správne vynútené zabezpečenie na úrovni riadkov (RLS) [S1]. To často vedie k vystaveniu osobných údajov (PII) alebo citlivých údajov aplikácií používateľom, ktorí majú prístup len k verejnému anonymnému kľúču API.
Hlavná príčina
Supabase používa Postgres Row Level Security na riadenie prístupu k údajom na úrovni databázy, čo je základom pre zabezpečenie údajov [S1]. V prostredí Next.js musia vývojári vytvoriť klienta Supabase, ktorý správne spracováva súbory cookie a relácie, aby sa zachovala bezpečnosť počas vykresľovania na strane servera [S2]. Zraniteľnosť sa zvyčajne vyskytuje, keď:
- Tabuľky sa vytvárajú bez zapnutia RLS, vďaka čomu sú prístupné prostredníctvom verejného anon kľúča [S1].
- Klient Supabase je nesprávne nakonfigurovaný v Next.js, pretože nedokáže správne odovzdať tokeny autentifikácie užívateľa do databázy [S2].
- Vývojári omylom používajú kľúč
service_rolev kóde na strane klienta, ktorý obchádza všetky zásady RLS [S1].
Opravy betónu
- Povoliť RLS: Zabezpečte, aby bola pre každú tabuľku vo vašej databáze Supabase [S1] povolená bezpečnosť na úrovni riadkov.
- Definujte pravidlá: Vytvorte špecifické pravidlá Postgres pre operácie
SELECT,INSERT,UPDATEaDELETEna obmedzenie prístupu na základe ZXZCVIX UIDXZCVIX UIDXZCVIX UIDXZCVIX UID. - Použite klientov SSR: Implementujte balík
@supabase/ssrna vytváranie klientov v Next.js, ktorí správne spravujú autentifikáciu na strane servera a perzistenciu relácie [S2].
Ako to testuje FixVibe
FixVibe to už pokrýva prostredníctvom nasadených aplikácií a kontrol repo. Pasívny modul baas.supabase-rls zisťuje Supabase páry adries URL a anonkey zo zväzkov JavaScript rovnakého pôvodu, žiada PostgREST o verejné metadáta tabuľky a vykonáva obmedzené výbery iba na čítanie na potvrdenie vystavenia anonymných údajov bez zmeny údajov o zákazníkoch. Repo skeny tiež spúšťajú repo.supabase.missing-rls na označenie migrácií SQL, ktoré vytvárajú verejné tabuľky bez ENABLE ROW LEVEL SECURITY, a tajné skenovania hľadajú odhalenie kľúča servisnej role predtým, ako sa dostane do prehliadača.
