FixVibe
Covered by FixVibehigh

Неовластен пристап до податоци преку исчезнати Supabase Безбедност на ниво на ред (RLS)

Во апликациите поддржани од Supabase, безбедноста на податоците се потпира на безбедноста на ниво на ред (RLS). Ако RLS не е експлицитно овозможен и конфигуриран со политики, секој корисник со јавен анонимен клуч може да чита, ажурира или брише податоци низ целата база на податоци. Ова е особено критично во средини Next.js каде што клиентот Supabase често се иницијализира со јавен клуч API.

CWE-284

Влијание

Неуспехот да се имплементира безбедност на ниво на ред (RLS) им овозможува на неавтентицираните напаѓачи да бараат податоци од базата на податоци Supabase кога јавните табели се изложени преку анонската граница [S1]. Бидејќи Next.js апликациите вообичаено го изложуваат клучот Supabase anon во кодот од клиентската страна, напаѓачот може да го користи овој клуч за да направи директни REST API повици за наменети REST API со тоа што ќе пристапи до корисничките повици наменети за базата на податоци. [S2].

Основна причина

Стандардно, табелите Postgres во Supabase бараат експлицитно активирање на безбедност на ниво на ред за да се спречи јавен пристап [S1]. Кога развивачот креира табела, но заборави да овозможи RLS или не успее да дефинира рестриктивни политики, базата на податоци може да ги изложи податоците на секој што го поседува клучот anon на проектот [S1]. Во апликациите Next.js, рендерирањето од страна на серверот и преземањето од страна на клиентот, исто така, бараат внимателно поставување на клиентот Supabase, така што автентицираниот кориснички контекст ќе го достигне слојот на базата на податоци [S2].

Бетонски поправки

  • Овозможете RLS: Извршете го ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; за секоја јавна табела што складира податоци за апликациите [S1].
  • Дефинирајте политики: Креирајте специфични политики кои го ограничуваат пристапот врз основа на статусот за автентикација на корисникот, како што е CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Безбедни клиенти од страна на серверот: Кога користите Next.js, чувајте ги клиентите за услужна улога само на серверот и сè уште применувајте филтри за сопственост пред да ги вратите податоците на корисниците [S2].

Како FixVibe тестира за него

FixVibe веќе извршува Supabase RLS само за читање преку baas.supabase-rls. Скенерот ја открива URL-адресата на проектот Supabase и јавниот anon клуч од пакетите JavaScript од исто потекло, бара од PostgREST за јавни метаподатоци од табелата и се обидува со ограничено избирање само за читање да потврди дали податоците се изложени без корисничка сесија. Не вметнува, ажурира, брише или користи акредитиви за услужна улога. Скенирањето на репо може и порано да го фатат ова преку repo.supabase.missing-rls, што ги означува миграциите на SQL што создаваат јавни табели без ENABLE ROW LEVEL SECURITY.