Dampak
Penyerang dapat melewati logika aplikasi untuk membaca, memperbarui, atau menghapus catatan dalam database jika Keamanan Tingkat Baris (RLS) tidak diterapkan dengan benar [S1]. Hal ini sering kali mengakibatkan terbukanya Informasi Identifikasi Pribadi (PII) atau data aplikasi sensitif kepada pengguna yang hanya memiliki akses ke kunci API anonim publik.
Akar Penyebab
Supabase menggunakan Keamanan Tingkat Baris Postgres untuk mengelola akses data di tingkat database, yang merupakan dasar untuk mengamankan data [S1]. Dalam lingkungan Next.js, pengembang harus membuat klien Supabase yang menangani cookie dan sesi dengan benar untuk menjaga keamanan selama rendering sisi server [S2]. Kerentanan biasanya muncul ketika:
- Tabel dibuat tanpa mengaktifkan RLS, sehingga dapat diakses melalui kunci langsung publik [S1].
- Klien Supabase salah dikonfigurasi di Next.js, gagal meneruskan token autentikasi pengguna dengan benar ke database [S2].
- Pengembang secara tidak sengaja menggunakan kunci
service_roledalam kode sisi klien, yang melewati semua kebijakan RLS [S1].
Perbaikan Beton
- Aktifkan RLS: Pastikan Keamanan Tingkat Baris diaktifkan untuk setiap tabel di database Supabase [S1] Anda.
- Tentukan Kebijakan: Buat kebijakan Postgres khusus untuk operasi
SELECT,INSERT,UPDATE, danDELETEuntuk membatasi akses berdasarkan UID [S1] pengguna. - Gunakan Klien SSR: Terapkan paket
@supabase/ssruntuk membuat klien di Next.js yang mengelola autentikasi sisi server dan persistensi sesi [S2] dengan benar.
Bagaimana FixVibe mengujinya
FixVibe sudah membahas hal ini melalui aplikasi yang diterapkan dan pemeriksaan repo. Modul pasif baas.supabase-rls menemukan URL Supabase dan pasangan kunci langsung dari bundel JavaScript asal yang sama, meminta PostgREST untuk metadata tabel publik, dan melakukan pemilihan hanya baca terbatas untuk mengonfirmasi paparan data anonim tanpa mengubah data pelanggan. Pemindaian repo juga menjalankan repo.supabase.missing-rls untuk menandai migrasi SQL yang membuat tabel publik tanpa ENABLE ROW LEVEL SECURITY, dan pemindaian rahasia mencari paparan kunci peran layanan sebelum mencapai browser.
