FixVibe
Covered by FixVibehigh

მონაცემთა არაავტორიზებული წვდომა გამოტოვებული Supabase მწკრივის დონის უსაფრთხოების საშუალებით (RLS)

Supabase მხარდაჭერილ აპლიკაციებში მონაცემთა უსაფრთხოება ეყრდნობა რიგის დონის უსაფრთხოებას (RLS). თუ RLS ცალსახად არ არის ჩართული და კონფიგურირებული პოლიტიკით, საჯარო ანონიმური გასაღების მქონე ნებისმიერ მომხმარებელს შეუძლია წაიკითხოს, განაახლოს ან წაშალოს მონაცემები მთელ მონაცემთა ბაზაში. ეს განსაკუთრებით მნიშვნელოვანია Next.js გარემოში, სადაც Supabase კლიენტი ხშირად ინიციალიზებულია საჯარო API გასაღებით.

CWE-284

გავლენა

მწკრივის დონის უსაფრთხოების (RLS) დანერგვის შეუსრულებლობა საშუალებას აძლევს არაავთენტიფიცირებულ თავდამსხმელებს მოითხოვონ მონაცემები Supabase მონაცემთა ბაზიდან, როდესაც საჯარო ცხრილები გამოფენილია ანონის საზღვრიდან [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-ის მეშვეობით. სკანერი აღმოაჩენს Supabase პროექტის URL-ს და საჯარო ანონ კლავიშს იმავე წარმოშობის JavaScript პაკეტებიდან, სთხოვს PostgREST-ს საჯარო ცხრილის მეტამონაცემებისთვის და ცდილობს მხოლოდ წაკითხვის შეზღუდვას ირჩევს დაადასტუროს, არის თუ არა მონაცემები გამოქვეყნებული მომხმარებლის სესიის გარეშე. ის არ აყენებს, განაახლებს, წაშლის ან არ იყენებს სერვისის როლის სერთიფიკატებს. რეპოს სკანირებას ასევე შეუძლია ამის ადრე დაფიქსირება repo.supabase.missing-rls-ის მეშვეობით, რომელიც მონიშნავს SQL მიგრაციას, რომელიც ქმნის საჯარო ცხრილებს ENABLE ROW LEVEL SECURITY-ის გარეშე.