شعار زيفيرنت

الأمان الجاد: التحقق أمر حيوي - فحص خطأ تسجيل دخول OAUTH

التاريخ:

نشر باحثون في شركة SALT لأمن تشفير الويب وصفًا رائعًا لكيفية العثور على ملف خطأ في المصادقة يطلق عليها اسم CVE-2023-28131 في مجموعة أدوات شعبية لبناء التطبيقات على الإنترنت تُعرف باسم Expo.

والخبر السار هو أن رد إكسبو حقًا سريعًا في تقرير الأخطاء الخاص بـ SALT ، والتوصل إلى إصلاح في غضون ساعات قليلة فقط من الكشف المسؤول لـ SALT.

لحسن الحظ ، لم يعتمد الإصلاح على قيام العملاء بتنزيل أي شيء ، لأنه تم تنفيذ التصحيح داخل الخدمة السحابية لـ Expo ، ولم يتطلب تصحيحات لأي تطبيقات مثبتة مسبقًا أو رمز من جانب العميل.

اكسبو استشاري لم تشرح فقط ما حدث وكيف أصلحته الشركة ، بل قدمت أيضًا نصائح برمجية لعملائها حول كيفية تجنب هذا النوع من الثغرات الأمنية المحتملة مع الخدمات الأخرى عبر الإنترنت.

ثم انتظرت SALT ثلاثة أشهر قبل نشر تقريرها ، بدلاً من الاستعجال في نشره لأغراض الدعاية بأسرع ما يمكن ، مما يمنح مستخدمي Expo فرصة لاستيعاب رد إكسبو والتصرف بناءً عليه.

الاحتفاظ بها بسيطة

تم شرح عملية المصادقة على عربات التي تجرها الدواب بالتفصيل في تقرير سالت، لكننا سنقدم هنا وصفًا مبسطًا إلى حد كبير لما حدث من خطأ في خدمة OAUTH الخاصة بإكسبو.

أوث، باختصار ل فتح إطار التفويض، هي عملية تسمح لك بالوصول إلى البيانات الخاصة في خدمة عبر الإنترنت (مثل تحرير ملفك الشخصي عبر الإنترنت ، أو إضافة مقالة مدونة جديدة ، أو الموافقة على خدمة ويب لإنشاء منشورات على وسائل التواصل الاجتماعي لك) ، دون إعداد كلمة مرور باستخدام ، أو تسجيل الدخول مباشرة إلى تلك الخدمة نفسها.

عندما ترى خدمات الويب التي تقدم لك ملف تسجيل الدخول باستخدام Google أو Facebook الخيار ، على سبيل المثال ، دائمًا ما يستخدمون OAUTH في الخلفية ، بحيث لا تحتاج إلى إنشاء اسم مستخدم جديد وكلمة مرور جديدة مع موقع ويب آخر ، أو إعطاء رقم هاتفك لخدمة أخرى عبر الإنترنت.

بالمعنى الدقيق للكلمة ، أنت تقوم بالمصادقة بشكل غير مباشر ، فقط تضع بيانات اعتماد Google أو Facebook في أحد تلك المواقع.

لا يحب بعض المستخدمين هذا ، لأنهم لا يريدون المصادقة على Google أو Facebook فقط لإثبات هويتهم لمواقع أخرى غير ذات صلة. يحب الآخرون ذلك لأنهم يفترضون أن مواقع مثل Facebook و Google تتمتع بخبرة أكبر في التعامل مع عملية تسجيل الدخول ، وتخزين تجزئة كلمات المرور بشكل آمن ، وتنفيذ 2FA ، أكثر من موقع ويب بوتيك حاول ربط عمليات أمان التشفير الخاصة به.

المصادقة الخارجية

مبسط إلى حد كبير ، تسجيل دخول على غرار OAUTH ، عبر حساب Facebook الخاص بك إلى موقع يسمى example.com، يذهب إلى شيء مثل هذا:

  • الموقع example.com يقول لتطبيقك أو متصفحك ، "مرحبًا X ، اذهب واحصل على رمز وصول سحري لهذا الموقع من Facebook."
  • تقوم بزيارة عنوان URL خاص على Facebook ، وتسجيل الدخول إذا لم تكن قد قمت بذلك بالفعل ، وقول ، "أعطني رمز وصول سحري لـ example.com".
  • إذا اقتنع Facebook بأنك من تدعي ، يجيب ، "مرحبًا ، X ، ها هو رمز الوصول السحري الخاص بك."
  • قمت بتسليم رمز الوصول إلى example.com, والتي يمكنها بعد ذلك الاتصال بفيسبوك نفسه للتحقق من صحة الرمز المميز.

لاحظ أن Facebook فقط يرى كلمة مرور Facebook ورمز 2FA ، إذا لزم الأمر ، لذا فإن خدمة Facebook تعمل كوسيط مصادقة بينك وبين example.com.

خلف الكواليس ، هناك تحقق نهائي ، مثل هذا:

  • الموقع example.com يقول للفيسبوك ، "هل أصدرت هذا الرمز المميز ، وهل تتحقق من صحة المستخدم X؟"
  • إذا وافق Facebook ، انها تخبر example.com، "نعم ، نحن نعتبر أن هذا المستخدم قد تمت مصادقته."

تسلسل هدام

يمكن أن يحدث الخطأ الذي وجده باحثو SALT في كود المعرض عن طريق التخريب الخبيث لمعالجة إكسبو لما يمكن أن تسميه عملية "وساطة المصادقة".

النقاط الرئيسية هي كما يلي:

  • يضيف المعرض نفسه غلافًا حول عملية التحقق ، بحيث يتعامل مع المصادقة والتحقق من الصحة نيابة عنك ، ويمرر في النهاية رمز وصول سحري إلى موقع الويب المطلوب (example.com في التبادل أعلاه) إلى التطبيق أو موقع الويب الذي تتصل منه.
  • المعلمات المستخدمة في التعامل مع التحقق معبأة في عنوان URL كبير يتم إرساله إلى خدمة المعرض.
  • يتم تخزين إحدى هذه المعلمات مؤقتًا في ملف تعريف ارتباط الويب يحدد عنوان URL الذي سيتم إرسال رمز الأمان السحري الأخير إليه لتمكين الوصول.
  • قبل تسليم رمز الأمان ، تطلب منك نافذة منبثقة التحقق من عنوان URL الذي على وشك التصريح به ، حتى تتمكن من اكتشاف أي شخص يحاول استبدال عنوان URL زائف في عملية تسجيل الدخول.
  • إذا وافقت على النافذة المنبثقة ، يقوم Expo بإعادة توجيهك إلى عملية التحقق من Facebook.
  • إذا وافق Facebook على التحقق ، يقوم بإرجاع رمز وصول سحري إلى خدمة Expo ، ويمرره Expo إلى عنوان URL الذي وافقت عليه للتو في النافذة المنبثقة ، ويطلق عليه اسم returnURL.
  • التطبيق أو موقع الويب الذي يستمع إلى الملف المحدد returnURL يتلقى رد إكسبو ، يكتسب رمز الوصول ، وبالتالي يتم مصادقته على أنه أنت.

لسوء الحظ ، وجد باحثو SALT أنه يمكنهم تخريب عملية تسجيل الدخول باستخدام كود JavaScript لبدء الوصول إلى عنوان URL الأولي لتسجيل الدخول إلى Expo ، ولكن بعد ذلك يتم إيقاف نافذة التحقق المنبثقة قبل أن يكون لديك الوقت لقراءتها أو الموافقة عليها بنفسك.

ومع ذلك ، في هذه المرحلة ، قامت خدمة Expo بالفعل بتعيين ملف تعريف ارتباط اسمه ru (باختصار ل returnURL) لإخباره بمكان معاودة الاتصال برمز الوصول السحري في النهاية.

وهذا يعني أن مجرمي الإنترنت يمكن أن يخدع كود إكسبو ليقوم "بالتذكر" أ returnURL مثل https://roguesite.example، دون أن ترى مربع الحوار لتحذيرك من وقوع هجوم ، ناهيك عن الموافقة عليه عن طريق الخطأ.

ثم استخدم الباحثون جزءًا ثانيًا من كود JavaScript لمحاكاة إعادة توجيه Expo إلى عملية التحقق من Facebook ، والتي ستنجح تلقائيًا إذا كنت (مثل العديد من الأشخاص) قد قمت بالفعل بتسجيل الدخول إلى Facebook نفسه.

سيؤدي التحقق من Facebook ، بدوره ، إلى إعادة توجيه عملية تسجيل الدخول إلى Expo إلى كود JavaScript الخاص بإكسبو ...

... التي من شأنها أن تنتزع بثقة ولكن بالخطأ ما لم يتم التحقق منه فعليًا returnURL لردها من هذا السحر ru ملف تعريف الارتباط الذي تم تعيينه في البداية ، دون موافقتك أو علمك.

فشل فتح أو فشل مغلق؟

كما ترون من الوصف أعلاه ، كانت الثغرة الأمنية ناتجة عن فشل كود إكسبو بشكل غير لائق.

يجب أن رمز المصادقة بشكل عام فشل مغلق، في المصطلحات ، مما يعني أن العملية لا ينبغي أن تنجح ما لم يتم الإشارة إلى نوع من الموافقة النشطة.

نحن نخمن أن إكسبو لم يقصد النظام أن يفعل ذلك تفشل في فتح، بالنظر إلى أن تقرير SALT يُظهر أن مربع حوار الموافقة المنبثق بدا كالتالي:

 يطلب منك التطبيق الموجود على https: //roguesite.example تسجيل الدخول إلى حسابك على Facebook. هل تثق تمامًا في https: //roguesite.example وتوافق على السماح بذلك: [لا] [نعم]

تم تعيين الإجابة الافتراضية ، كما تتوقع ، على [No]، ولكن هذا لن يؤدي إلا إلى فشل النظام في الإغلاق إذا كنت تستخدم رمز إكسبو من جانب العميل دينياً للتحكم في عملية التحقق.

من خلال توفير JavaScript الخاص بهم لتشغيل تسلسل طلبات التحقق ، تمكن الباحثون من التعامل مع مربع حوار الموافقة كما لو كان قد قال:

 إذا لم تخبرنا صراحةً بحظر https: //roguesite.example من تسجيل الدخول عبر حسابك على Facebook ، فسنسمح لها بذلك: [Allow] [Block]

كان الحل ، من بين التغييرات الأخرى ، هو رمز تسجيل الدخول الأولي لإكسبو لضبط هذا السحر ru كوكي فقط بعد موافقتك صراحة على ما يسمى ب returnURL، بحيث يفشل رمز تسجيل دخول JavaScript اللاحق من Expo في حالة تخطي نافذة التحقق المنبثقة ، بدلاً من الوثوق بشكل أعمى بعنوان URL لم تره أو توافق عليه من قبل.

من نواح كثيرة ، يشبه هذا الخطأ ملف بلكين ويمو سمارت بلج الخطأ الذي كتبناه منذ حوالي أسبوعين ، على الرغم من أن السبب الجذري في حالة Belkin كان تجاوز سعة المخزن المؤقت ، وليس رد اتصال ويب مارق.

خصص كود Belkin مخزنًا مؤقتًا للذاكرة بسعة 68 بايت في رمز جانب الخادم الخاص به ، ولكنه اعتمد على التحقق من الكود الخاص به من جانب العميل الذي لم تحاول إرسال أكثر من 68 بايت ، وبالتالي ترك الخادم تحت رحمة المهاجمين الذين قرروا ذلك. للتحدث إلى الخادم باستخدام رمز العميل الخاص به والذي تجاوز عملية التحقق.

ماذا ستفعلين.. إذًا؟

  • عند الإبلاغ عن الأخطاء وكتابتها ، ضع في اعتبارك اتباع SALT's مثال. قم بالإفصاح بشكل مسؤول ، مع منح البائع وقتًا معقولاً لإصلاح الثغرة الأمنية ، بالإضافة إلى وقت معقول لتقديم المشورة لمستخدميه ، قبل نشر التفاصيل التي من شأنها أن تسمح لأي شخص آخر بإنشاء استغلال خاص به.
  • عند تلقي تقارير الأخطاء ، النظر في متابعة إكسبو مثال. قم بالرد بسرعة ، وابق على اتصال بمراسل الخطأ ، وقم بتصحيح الثغرة في أسرع وقت ممكن ، وقدم تقريرًا استقصائيًا مفيدًا لمستخدميك ، وحافظ على الموضوعية. (قاوم اقتراحات فريق التسويق الخاص بك للثناء على نفسك "لأخذك الأمان على محمل الجد" أو رفض المشكلة باعتبارها غير مهمة. هذا أمر يقرره المستخدمون ، بناءً على سرعة استجابتك ومدى ملاءمتها وتقييمهم الخاص للمخاطر.)
  • تأكد من إغلاق رمز المصادقة الخاص بك. تأكد من عدم وجود خطوات تحقق أو موافقة يمكن تحييدها ببساطة عن طريق تجاهلها أو إلغائها.
  • لا تفترض أبدًا أن رمز العميل الخاص بك سيكون متحكمًا في عملية التحقق. افترض أن المهاجمين سيعملون على إجراء هندسة عكسية للبروتوكول الخاص بك وإنشاء رمز عميل خاص بهم للتحايل على أكبر عدد ممكن من عمليات التحقق.
  • تسجيل الخروج من حسابات الويب عندما لا تستخدمها بنشاط. يقوم العديد من الأشخاص بتسجيل الدخول إلى حسابات مثل Google و Amazon و Facebook و Apple وغيرها ، ثم يظلون مسجلين للدخول إلى أجل غير مسمى ، لأنه مناسب. يمنع تسجيل الخروج حدوث العديد من الإجراءات (بما في ذلك المصادقات والمنشورات والإعجابات والمشاركات وغير ذلك الكثير) من الحدوث عندما لا تتوقعها - سترى بدلاً من ذلك مطالبة بتسجيل الدخول.

لا تنس أنه من خلال تسجيل الخروج من خدمات الويب متى استطعت ، ومن خلال مسح جميع ملفات تعريف الارتباط الخاصة بالمتصفح وبيانات الويب المخزنة بشكل متكرر ، فإنك تقلل أيضًا من مقدار معلومات التتبع التي يمكن أن تجمعها المواقع عنك أثناء تصفحك.

بعد كل شيء ، إذا لم تقم بتسجيل الدخول ، ولم يكن لديك أي ملفات تعريف ارتباط تتبع متبقية من قبل ، فإن المواقع لم تعد تعرف من أنت بالضبط ، أو ما الذي قمت به في المرة الأخيرة التي قمت بزيارتها.


بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة

الدردشة معنا

أهلاً! كيف يمكنني مساعدك؟