FixVibe
Covered by FixVibehigh

Eksik Supabase Satır Düzeyi Güvenliği (RLS) Yoluyla Yetkisiz Veri Erişimi

Supabase destekli uygulamalarda veri güvenliği, Satır Düzeyi Güvenliğine (RLS) dayanır. RLS açıkça etkinleştirilmemiş ve politikalarla yapılandırılmamışsa, genel anonim anahtara sahip herhangi bir kullanıcı, veritabanının tamamındaki verileri okuyabilir, güncelleyebilir veya silebilir. Bu, Next.js istemcisinin genellikle genel bir API anahtarıyla başlatıldığı Next.js ortamlarında özellikle kritiktir.

CWE-284

Etki

Satır Düzeyi Güvenliğinin (RLS) uygulanmaması, genel tablolar [S1] anon sınırı üzerinden açığa çıkarıldığında kimliği doğrulanmamış saldırganların bir Supabase veritabanından veri sorgulamasına olanak tanır. Next.js uygulamaları genellikle istemci tarafı kodunda Supabase anon anahtarını açığa çıkardığından, bir saldırgan bu anahtarı kullanarak amaçlanan uygulama mantığını atlayarak ve hassas kullanıcı bilgilerine erişerek veritabanına doğrudan REST API çağrıları yapabilir. [S2].

Temel Neden

Varsayılan olarak, Supabase'deki Postgres tabloları, [S1] genel erişimini önlemek için Satır Düzeyi Güvenliğinin açık bir şekilde etkinleştirilmesini gerektirir. Bir geliştirici bir tablo oluşturduğunda ancak RLS'yi etkinleştirmeyi unuttuğunda veya kısıtlayıcı politikalar tanımlamayı başaramadığında, veritabanı, projenin anon anahtarı [S1]'ye sahip olan herkesin kullanımına açık hale gelebilir. Next.js uygulamalarında, sunucu tarafı oluşturma ve istemci tarafı getirme işlemleri de dikkatli Supabase istemci kurulumu gerektirir, böylece kimliği doğrulanmış kullanıcı bağlamı [S2] veritabanı katmanına ulaşır.

Beton Düzeltmeleri

  • RLS'yi etkinleştirin: [S1] uygulama verilerini depolayan her genel tablo için ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;'yi çalıştırın.
  • İlkeleri Tanımlayın: Kullanıcının kimlik doğrulama durumuna göre erişimi kısıtlayan CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1] gibi belirli ilkeler oluşturun.
  • Güvenli Sunucu Tarafı İstemciler: Next.js kullanırken, hizmet rolü istemcilerini yalnızca sunucuda tutun ve verileri [S2] kullanıcılarına döndürmeden önce sahiplik filtrelerini uygulamaya devam edin.

FixVibe bunu nasıl test ediyor?

FixVibe zaten baas.supabase-rls aracılığıyla salt okunur bir Supabase RLS denetimi çalıştırıyor. Tarayıcı, aynı kaynaklı JavaScript paketlerinden Supabase proje URL'sini ve genel anon anahtarını keşfeder, PostgREST'ten genel tablo meta verilerini ister ve verilerin bir kullanıcı oturumu olmadan açığa çıkıp çıkmadığını doğrulamak için sınırlı salt okunur seçimler yapmaya çalışır. Hizmet rolü kimlik bilgilerini eklemez, güncellemez, silmez veya kullanmaz. Repo taramaları da ENABLE ROW LEVEL SECURITY olmadan genel tablolar oluşturan SQL geçişlerini işaretleyen repo.supabase.missing-rls aracılığıyla bunu daha erken yakalayabilir.