Abdullah Alammar
Abdullah Alammar

@Aalammar11

12 تغريدة 39 قراءة Jan 07, 2021
في كثير من الأحيان مختبري الاختراق و ال "bug hunters " يجدون ثغرة في تطبيقات الويب تسمح لهم بإضافة parameter جديد في ال request يخليهم يقدرون يعدلون على قواعد البيانات او يحصلون على صلاحيات ادمن أو أي إجراء غير قانوني. مثال:
مثال: عند تسجيل مستخدم جديد راح يطلب اسم المستخدم والايميل والرقم السري .. وراح يكون الفورم في الفرونتيند مثل كذا
بينما ال object في الباكيند راح يكون مثل كذا (او على حسب لغة البرمجة)
وال controller اللي بيربط بين الview و الmodel بيكون مثل كذا. (وهذا ايضاً تعتمد طريقة بنائه على لغة البرمجة)
السيناريو الطبيعي هو أن الrequest اللي بيطلع من عندك (client server) للويب سيرفر راح يكون محتواه اسم المستخدم والايميل والرقم السري مثل اللي بالصورة. طيب وش السيناريو النكبة اللي ممكن يصير ؟
وسبب وجود الثغرة السابقة هو ان المطور ما وضع قيود تمنع ال request من تعديل اي قيمة اخرى غير الايميل واسم المستخدم والرقم السري. أما كيف نحلها، فهناك اكثر من طريقة لحل المشكلة، أحدها هو تحديد القيم اللي مسموح التعديل عليها مثل كذا (وكل لغة لها طريقتها).
راح يجيب المطور العيد اذا المخترق اضاف parameter زيادة وهو isAdmin=true . في هذه الحالة راح يضيف اليوزر في السيستم بصلاحية آدمن. طيب الان كيف صارت هالمشكلة وكيف ممكن نحلها ؟ اللي صار اسمه ثغرة Mass Assignment
عشان نفهم السالفة من البداية ، الان اغلب لغات البرمجة في الويب والأطر التابعه لها (web frameworks) مبنية بتصميم ( MVC architecture) وهي اختصار ل Model, view , controller
Model: وهذه هي ال object وتمثل حساب المستخدم في المثال السابق . View: وهذا هو اللي يمثل الواجهات اللي تظهر للعميل . Controller: وهذا اللي فيه العمليات المنطقية وهو اللي غالباً يربط بين view و model
اللي صاير الان انه فيه خاصية تسهل على المطورين ربط البيانات اللي ترسل في الrequest مباشرة وبطريقة اتوماتيكية مع ال object ففي مثالنا ما يحتاج المطور انه يربط الايميل في ال request مع الايميل لل object اليوزر. وهذه الخاصية تسمى Mass assignment
فاللي حصل في الثغرة السابقة هو ان المطور ما وضع قيود تمنع ال request من تعديل اي قيمة اخرى غير الايميل واسم المستخدم والرقم السري.
أما كيف نحلها، فهناك اكثر من طريقة لحل المشكلة، أحدها هو تحديد القيم اللي مسموح التعديل عليها مثل كذا (وكل لغة لها طريقتها).
من المراجع: owasp code review guide + owasp sheet cheat

جاري تحميل الاقتراحات...