FixVibe
Covered by FixVibehigh

Akses Data Tanpa Kebenaran melalui Keselamatan Tahap Baris Supabase Hilang (RLS)

Dalam aplikasi yang disokong Supabase, keselamatan data bergantung pada Keselamatan Tahap Baris (RLS). Jika RLS tidak didayakan dan dikonfigurasikan secara eksplisit dengan dasar, mana-mana pengguna dengan kunci tanpa nama awam boleh membaca, mengemas kini atau memadam data merentas keseluruhan pangkalan data. Ini amat kritikal dalam persekitaran Next.js di mana pelanggan Supabase sering dimulakan dengan kunci API awam.

CWE-284

Kesan

Kegagalan untuk melaksanakan Keselamatan Tahap Baris (RLS) membenarkan penyerang yang tidak disahkan menanyakan data daripada pangkalan data Supabase apabila jadual awam didedahkan melalui sempadan anon [S1]. Oleh kerana aplikasi Next.js lazimnya mendedahkan kunci Supabase anon dalam kod sisi klien, penyerang boleh menggunakan kunci ini untuk membuat REST terus API melalui panggilan dan akses kepada pangkalan data, maklumat sensitif pengguna yang dimaksudkan. [S2].

Punca Punca

Secara lalai, jadual Postgres dalam Supabase memerlukan pengaktifan eksplisit Row Level Security untuk menghalang akses awam [S1]. Apabila pembangun mencipta jadual tetapi terlupa untuk mendayakan RLS atau gagal mentakrifkan dasar sekatan, pangkalan data mungkin mendedahkan data kepada sesiapa sahaja yang memiliki kunci anon projek [S1]. Dalam aplikasi Next.js, pemaparan sebelah pelayan dan pengambilan sebelah pelanggan juga memerlukan persediaan pelanggan Supabase yang teliti supaya konteks pengguna yang disahkan mencapai lapisan pangkalan data [S2].

Pembetulan Konkrit

  • Dayakan RLS: Laksanakan ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; untuk setiap jadual awam yang menyimpan data apl [S1].
  • Tentukan Dasar: Buat dasar khusus yang menyekat akses berdasarkan status pengesahan pengguna, seperti CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Klien Sebelah Pelayan Selamat: Apabila menggunakan Next.js, kekalkan pelayan peranan pelanggan perkhidmatan sahaja dan masih menggunakan penapis pemilikan sebelum mengembalikan data kepada pengguna [S2].

Bagaimana FixVibe mengujinya

FixVibe sudah menjalankan semakan Supabase RLS baca sahaja melalui baas.supabase-rls. Pengimbas menemui URL projek Supabase dan kunci anon awam daripada berkas JavaScript asal yang sama, meminta PostgREST untuk metadata jadual awam dan cuba memilih baca sahaja terhad untuk mengesahkan sama ada data didedahkan tanpa sesi pengguna. Ia tidak memasukkan, mengemas kini, memadam atau menggunakan kelayakan peranan perkhidmatan. Imbasan Repo juga boleh menangkap ini lebih awal melalui repo.supabase.missing-rls, yang membenderakan migrasi SQL yang mencipta jadual awam tanpa ENABLE ROW LEVEL SECURITY.