25 تغريدة 12 قراءة Dec 20, 2022
مع تطور الهجمات السيبرانيه صار لازم على المتصفحات توخي الحذر وجعل المستخدم في بقعه امنه قدر المستطاع، ولذلك تم إنشاء مفهوم الـ Same-origin Policy عند المتصفحات وهي ميكانيزما شديدة الحرص تحد من تواصل الموقع ومكوناته والسكربتات الي فيه مع اي موقع اخر
فمثلاً لو كان عندنا الموقع
store.company.com
فف هو مثل ما نشوف بالجدول ادناه:
- ممنوع من التواصل مع نفسه عن طريق بروتوكول مختلف يعني لو شغال على ال https ما يتواصل مع الـ http
⁃ ممنوع يتواصل مع بورت مختلف
⁃ ممنوع يتواصل مع سب دومين مختلف
يعني باختصار الموقع ما يقدر يتواصل الا مع نفسه
عشان نشوف بالحقيقه كيف يعني "ممنوعه" بالحقيقه بجرب على موقع موقعي التجارب اعلاها؛
طبعاً بستعمل الكونسول تبع المتصفح من داخل موقعي وبحط فيه كود js يرسل ريكويزت للرابط ويطبع لك الريسبونس
فنشوف لمن اطلب صفحة من موقعي عادي بيجيبها
ولكن لو نطبق الامثله اعلاه بيجينا هالخطأ والي يعبر عن امتناع المتصفحات من جلب صفحات خارج الـ origin وذلك انصياعاً للـ Same Origin Policy (SOP)
وهنا نشأت مشكلة جديده للمبرمجين، الا وهي في الوضع هذا ما يقدر المبرمج انه يحط API ب سب دومين مختلف ويتواصل معاه، مع ان هذي الطريقة هي طريقة طبيعيه مستعمله في الايام هذي ولكن كيف كذا ؟ كيف يتواصلون والـ SOP يمنعهم
هنا احب اقولك ان ثورة المبرمجين الوهاجه انتصرت وتم انشاء مفهوم الـ Cross Origin Resource Sharing والي هو عباره عن ميكانيزما تخلي السيرفر يسمح بعرض مصادر ( صفحات ) السيرفر لمن هم خارج الـ origin (خارج نطاق الدومين)
الميكانيزما هذي اذا تطبقت بشكل صحيح، بتكون اضافت حماية للموقع ولكن اذا تطبقت بشكل خاطئ فف هي بتنزع طبقة الحماية حقت الـ SOP وهذا ما سوف ندردش فيه اليوم
عشان يتم تطبيق مفهوم الـ CORS فف السيرفر بالحقيقه يضع مجموعه من الهيدرات الي غالباً تبدأ بكلمة Access-Control مثل بالصوره ادناه
حنا في هذا الثريد نبي نركز على الهيدرين الي محددين بالازرق لانهم هم اساس البلا والصلاح
الهيدير الاول اذا كان true فف هو يقول للبروازر خذ الريسبونس مع الـ Cookies والـ authorization headers
الهيدير الثاني السيرفر يحط فيه الدومينات الي مسموح لهم اخذ الريسبونس / مسموح لهم ان يعدون من الـ SOP
ودي اني اوقف هنا واسوي ريكاب للي صار قبل اخش بالعميق، الحين فيه بالمتصفحات طبقة تمثل حماية الا وهي الـ SOP، هذي الطبقه جداً restrected فف عشان المبرمجين ياخذون مساحة من الحريه لتصميم برامج كبيره ولها اكثر من دومين او سب دومين صار فيه شي اسمه CORS يساعدهم في ذلك
عشان نشوف طبقة الحماية مرئا المجاز لنفترض انك حصلت موقع عليه ثغره CSRF وعشان تنفذ هذي الثغره وتحصد اكبر ضرر للموقع انت تحتاج تستغلها بخطوتين خطوه تخلي المتصفح يقرا معلومات من الموقع، والخطوه الثانيه انك تستغل المعلومات هذي مع الثغره
لو الموقع المصاب مو حاط موقعك الي بتستضيف فيه الاستغلال ، من الدومينات الي مسموح باخذ الريسبونس عن طريق ال CORS فف غالباً استغلالك ابو خطوتين ما بيضبط
حلو ؟ حلو
عشان يسمح لموقع باخذ الريسبونس مثل ما قلنا سابقاً لازم تستخدم الهيدر Allow-Control-Allow-Origin وتحط فيه الدومينات الي تبي يسمح لها باخذ الرد منك عن طريق سكربتات JS
سنتاكس الهيدر هذا نشوفه بالصوره ادناه؛
وهنا ودي انوه لنقطه تخص لكل مهتمين بالامن السيبراني كلهم، الحين لمن تشوف موقع يرد عليك بالهيدر هذا وبالقيمه هذي
Allow-Control-Allow-Origin: *
واذا مافيه Access-Control-Allow-Credentials: true
فف هذي ما يعني ان فيه ثغرة CORS misconfiguration
لان هذا شي طبيعي وفقاً لكلام الـ MDN
ووفقاً لنفسهم MDN ال * تعتبر ان كل الدومينات مسموح لها تقرا الريسبونس بشرط ان الـ Allow Credentials مو موجوده
قف مع نفسك قليلا وفكر فيها، بعض الاحيان يكون مواقع مافيها معلومات حساسه فعادي يقراها الـ js وغير الـ js من اي مكان
ولكن غالباً اذا فيه هيدر
Access-Control-Allow-Credentials: true
فالموقع فيه تسجيل دخول وكوكيز وحركات authentication فف مو من المنطقي تخلي كل المواقع تقراها مع الكوكيز لانك كذا هدمت صرح مفهوم الـ SOP
طييب لنفرض اني مبرمج وابي اسمح لاكثر من دومين بانهم ياخذون الريسبونس وش السواه ؟
في الـ CORS انت مسموح لك بس تحط دومين واحد داخل قيمة الهيدر
Allow-Control-Allow-Origin:
فف لو تبي تحط اكثر من دومين قانونياً وسيكيورتياً انت مالك الا تحط هيدر لكل دومين مثل كذا
Allow-Control-Allow-Origin: c.com
Allow-Control-Allow-Origin: t.com
Allow-Control-Allow-Origin: z.com
بس هذي الطريقة ما تنفع مع المبرمجين كون الطريقة منطقياً نايمه
فف غالباً يسوون نفس اخونا في الانسانيه ادناه؛
بانه يخلي تحديد قيمة الهيدر ديناميكياً، يعني يشوف الـ origin header من الريكويزت ويحطه بالريسبونس وهنا تولد الطامه في اغلب الاحيان بما انه بتكون هذي الحركه مقرونه مع الهيدر الي يسمح بقراءة الكوكيز والهيدرات التحقق ( كاتبها فوق بالانقليزي اذا مافهمتها )
فف هنا لو تسوي موقع فيه كود js يسحب الكوكيز من الموقع المصاب، بتطلع الريكويزت منك مع الـ origin header الي قيمته بتكون اسم موقعك، السيرفر بيخلي قيمة الهيدر Allow-Control-Allow-Origin: ديناميكياً باسم موقعك وموجود هيدر
الـ Access-Control-Allow-Credentials بقيمة true
ويكون كان موقعك موثوق فيه ومسموح له انه يقرا الكوكيز مع الريسبونس وبعدها تقدر ترسل الكوكيز لنفسك او تحفظه بمكان انت وشطارة كودك الي بتستغل فيه الثغره وتسرق الكوكيز والي هو بمثابة كينونة الشخص المستهدف الالكترونيه وبكذا تسرق حسابه في الموقع المصاب
والى هنا احس هليت معلومات كثيره لعلي في semi-ثريد قادم اشرح الـ simple وال preflight requests
المصادر ؛
⁃ بهاراتي الخاصه 👨🏻‍🍳
- developer.mozilla.org
- portswigger.net
-

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