Poveikis
Užpuolikai gali apeiti programos logiką, kad galėtų skaityti, atnaujinti arba ištrinti duomenų bazės įrašus, jei eilutės lygio sauga (RLS) nėra tinkamai vykdoma [S1]. Dėl to naudotojai, kurie turi prieigą tik prie viešojo anoniminio API rakto, dažnai atskleidžia asmens identifikavimo informaciją (PII) arba neskelbtinus programos duomenis.
Pagrindinė priežastis
Supabase naudoja Postgres Row Level Security, kad valdytų prieigą prie duomenų duomenų bazės lygiu, o tai yra būtina norint apsaugoti duomenis [S1]. Next.js aplinkoje kūrėjai turi sukurti Supabase klientą, kuris teisingai tvarko slapukus ir seansus, kad išlaikytų saugumą serverio atvaizdavimo [S2] metu. Pažeidžiamumas paprastai atsiranda, kai:
- Lentelės kuriamos neįjungus RLS, todėl jas galima pasiekti naudojant viešąjį anoninį raktą [S1].
- Supabase klientas yra netinkamai sukonfigūruotas Next.js, todėl nepavyksta tinkamai perduoti vartotojo autentifikavimo prieigos raktų į duomenų bazę [S2].
- Kūrėjai netyčia naudoja
service_roleraktą kliento kode, kuris apeina visas RLS politikos kryptis [S1].
Betoniniai pataisymai
- Įgalinti RLS: Įsitikinkite, kad eilutės lygio sauga įgalinta kiekvienoje lentelėje jūsų Supabase duomenų bazėje [S1].
- Apibrėžkite politiką: sukurkite konkrečias „Postgres“ strategijas, skirtas
SELECT,INSERT,UPDATEirDELETEoperacijoms, kad apribotumėte prieigą pagal naudotojo ZBETCENVIXVZX UID. - Naudokite SSR klientus: įdiekite paketą
@supabase/ssr, kad sukurtumėte klientus Next.js, kurie tinkamai valdo serverio autentifikavimą ir seanso išlikimą [S2].
Kaip FixVibe tai tikrina
FixVibe tai jau apima per įdiegtų programų ir atpirkimo patikras. Pasyvus modulis baas.supabase-rls aptinka Supabase URL ir anon-raktų poras iš tos pačios kilmės „JavaScript“ paketų, paprašo „PostgREST“ pateikti viešųjų lentelės metaduomenų ir atlieka ribotą tik skaitymo atranką, kad patvirtintų anoniminių duomenų pateikimą, nepakeičiant klientų duomenų. Atpirkimo nuskaitymai taip pat vykdomi repo.supabase.missing-rls, kad būtų pažymėti SQL perkėlimai, sukuriantys viešąsias lenteles be ENABLE ROW LEVEL SECURITY, o slaptuose nuskaitymuose ieškoma paslaugos vaidmens rakto, kol jis pasiekia naršyklę.
