Wpływ
Osoby atakujące mogą ominąć logikę aplikacji w celu odczytu, aktualizacji lub usunięcia rekordów w bazie danych, jeśli zabezpieczenia na poziomie wiersza (RLS) nie są odpowiednio egzekwowane [S1]. Często skutkuje to ujawnieniem informacji umożliwiających identyfikację użytkownika (PII) lub wrażliwych danych aplikacji użytkownikom, którzy mają dostęp jedynie do publicznego anonimowego klucza API.
Główna przyczyna
Supabase wykorzystuje Postgres Row Level Security do zarządzania dostępem do danych na poziomie bazy danych, co jest podstawą zabezpieczenia danych [S1]. W środowisku Next.js programiści muszą utworzyć klienta Supabase, który poprawnie obsługuje pliki cookie i sesje, aby zachować bezpieczeństwo podczas renderowania po stronie serwera [S2]. Luki w zabezpieczeniach zwykle powstają, gdy:
- Tabele są tworzone bez włączonej opcji RLS, dzięki czemu są dostępne poprzez publiczny klucz anon [S1].
- Klient Supabase jest błędnie skonfigurowany w Next.js i nie przekazuje prawidłowo tokenów uwierzytelniających użytkowników do bazy danych [S2].
- Programiści przypadkowo używają klucza
service_rolew kodzie po stronie klienta, co omija wszystkie zasady RLS [S1].
Poprawki betonu
- Włącz RLS: Upewnij się, że dla każdej tabeli w Twojej bazie danych Supabase [S1] są włączone zabezpieczenia na poziomie wiersza.
- Określ zasady: Utwórz specjalne zasady Postgres dla operacji
SELECT,INSERT,UPDATEiDELETE, aby ograniczyć dostęp na podstawie identyfikatora UID użytkownika [S1]. - Użyj klientów SSR: Zaimplementuj pakiet
@supabase/ssr, aby utworzyć klientów w Next.js, którzy poprawnie zarządzają uwierzytelnianiem po stronie serwera i trwałością sesji [S2].
Jak FixVibe to testuje
FixVibe uwzględnia już ten problem podczas sprawdzania wdrożonych aplikacji i repo. Pasywny moduł baas.supabase-rls wykrywa adresy URL Supabase i pary bez kluczy z pakietów JavaScript tego samego pochodzenia, pyta PostgREST o metadane tabeli publicznej i wykonuje ograniczone wybory tylko do odczytu, aby potwierdzić ekspozycję anonimowych danych bez mutowania danych klientów. Skanowania repozytorium uruchamiają również repo.supabase.missing-rls, aby oznaczyć migracje SQL tworzące tabele publiczne bez ENABLE ROW LEVEL SECURITY, a skany tajnych szukają ujawnienia klucza roli usługi, zanim dotrze on do przeglądarki.
