FixVibe
Covered by FixVibehigh

Μη εξουσιοδοτημένη πρόσβαση σε δεδομένα μέσω έλλειψης Supabase Ασφάλεια επιπέδου σειράς (RLS)

Σε εφαρμογές που υποστηρίζονται από Supabase, η ασφάλεια δεδομένων βασίζεται στην ασφάλεια επιπέδου σειράς (RLS). Εάν το RLS δεν είναι ρητά ενεργοποιημένο και ρυθμισμένο με πολιτικές, οποιοσδήποτε χρήστης με το δημόσιο ανώνυμο κλειδί μπορεί να διαβάσει, να ενημερώσει ή να διαγράψει δεδομένα σε ολόκληρη τη βάση δεδομένων. Αυτό είναι ιδιαίτερα κρίσιμο σε περιβάλλοντα Next.js όπου ο πελάτης Supabase εκκινείται συχνά με ένα δημόσιο κλειδί API.

CWE-284

Αντίκτυπος

Η αποτυχία εφαρμογής της ασφάλειας επιπέδου γραμμής (RLS) επιτρέπει σε εισβολείς χωρίς έλεγχο ταυτότητας να υποβάλουν ερωτήματα σε δεδομένα από μια βάση δεδομένων Supabase όταν οι δημόσιοι πίνακες εκτίθενται μέσω του ορίου anon [S1]. Επειδή οι εφαρμογές Next.js συνήθως εκθέτουν το κλειδί Supabase anon στον κώδικα πελάτη, ένας εισβολέας μπορεί να χρησιμοποιήσει αυτό το κλειδί για να πραγματοποιήσει απευθείας 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 μπορούν επίσης να το εντοπίσουν νωρίτερα μέσω του repo.supabase.missing-rls, το οποίο επισημαίνει τις μετεγκαταστάσεις SQL που δημιουργούν δημόσιους πίνακες χωρίς ENABLE ROW LEVEL SECURITY.