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].

بنیادی وجہ

پہلے سے طے شدہ طور پر، 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 پہلے سے ہی baas.supabase-rls کے ذریعے صرف پڑھنے کے لیے Supabase RLS چیک چلاتا ہے۔ اسکینر Supabase پروجیکٹ URL اور ایک ہی اصل کے JavaScript بنڈلز سے عوامی anon کلید دریافت کرتا ہے، PostgREST سے پبلک ٹیبل میٹا ڈیٹا کے لیے پوچھتا ہے، اور اس بات کی تصدیق کرنے کے لیے محدود پڑھنے کی کوشش کرتا ہے کہ آیا ڈیٹا صارف کے سیشن کے بغیر سامنے آیا ہے۔ یہ سروس رول کی اسناد داخل، اپ ڈیٹ، حذف یا استعمال نہیں کرتا ہے۔ ریپو اسکینز اسے پہلے بھی repo.supabase.missing-rls کے ذریعے پکڑ سکتے ہیں، جو کہ ENABLE ROW LEVEL SECURITY کے بغیر عوامی ٹیبلز بنانے والے SQL مائیگریشن کو جھنڈا لگاتا ہے۔