FixVibe
Covered by FixVibehigh

Next.js + Supabase turvamine: reataseme turvalisuse (RLS) ümbersõitude vältimine

Rakendused, mis on loodud funktsioonidega Next.js ja Supabase, tuginevad andmete kaitsmisel sageli reataseme turvalisusele (RLS). RLS lubamata jätmine või kliendi Supabase vale konfigureerimine võib viia andmebaasi täieliku eksponeerimiseni, võimaldades volitamata kasutajatel tundlikke kirjeid lugeda või muuta.

CWE-284

Mõju

Ründajad saavad andmebaasi kirjete lugemiseks, värskendamiseks või kustutamiseks rakendusloogikast mööda minna, kui reataseme turvalisus (RLS) ei ole [S1] korralikult jõustatud. Selle tulemuseks on sageli isikutuvastava teabe (PII) või tundlike rakenduseandmete paljastamine kasutajatele, kellel on juurdepääs ainult avalikule anonüümsele API-võtmele.

Algpõhjus

Supabase kasutab andmetele juurdepääsu haldamiseks andmebaasi tasemel turvalisust Postgres Row Level, mis on andmete [S1] turvalisuse jaoks ülioluline. Next.js keskkonnas peavad arendajad looma Supabase kliendi, mis haldab küpsiseid ja seansse õigesti, et säilitada turvalisus serveripoolse renderdamise ajal [S2]. Haavatavus ilmneb tavaliselt siis, kui:

  • Tabelid luuakse ilma, et RLS oleks lubatud, mistõttu need on juurdepääsetavad avaliku anon-võtmega [S1].
  • Supabase klient on failis Next.js valesti konfigureeritud, kuna see ei edasta kasutaja autentimismärke õigesti andmebaasi [S2].
  • Arendajad kasutavad kliendipoolses koodis kogemata võtit service_role, mis läheb mööda kõigist RLS poliitikatest [S1].

Betooniparandused

  • Lubage RLS: Veenduge, et reataseme turvalisus oleks teie Supabase andmebaasis [S1] iga tabeli jaoks lubatud.
  • Määrake poliitikad: looge konkreetsed Postgresi eeskirjad toimingute jaoks SELECT, INSERT, UPDATE ja DELETE, et piirata juurdepääsu kasutaja UID-le ZBETCEN4XVIXZX.
  • Kasutage SSR-i kliente: rakendage paketti @supabase/ssr, et luua Next.js-s kliente, mis haldavad õigesti serveripoolset autentimist ja seansi püsivust [S2].

Kuidas FixVibe seda testib

FixVibe katab selle juba juurutatud rakenduste ja repokontrollide kaudu. Passiivne moodul baas.supabase-rls avastab Supabase URL-i ja anon-võtme paarid sama päritoluga JavaScripti kimpudest, küsib PostgREST-ilt avalikke tabeli metaandmeid ja teeb piiratud kirjutuskaitstud valikuid, et kinnitada anonüümseid andmeid ilma kliendiandmeid muutmata. Repokontrollid käitavad ka repo.supabase.missing-rls, et märgistada SQL-i migratsioonid, mis loovad avalikke tabeleid ilma ENABLE ROW LEVEL SECURITY-ta, ja salajased kontrollid otsivad teenuserolli võtme kokkupuudet enne, kui see brauserisse jõuab.