العودة
لماذا لا يزال المطورون يخطئون في فهم CORS: الدرس من ثغرة localhost في زوم
SiTech AI Team3 წთ. საკითხავი

لماذا لا يزال المطورون يخطئون في فهم CORS: الدرس من ثغرة localhost في زوم

مقالة للمستشار كريس فوستر تستخدم ثغرة localhost في تطبيق زوم عام 2019 لتُظهر كيف أدى سوء فهم مبدأ CORS إلى مشكلات أمنية حقيقية، وكيف ينبغي أن يبدو التطبيق الآمن الصحيح في هذه الحالة.

تُظهر مقالة كتبها المستشار في تطوير الويب الكامل كريس فوستر عام 2019 وما زالت تتداول بين المطورين أن عدداً كبيراً من مطوري الويب لا يفهمون آلية مشاركة الموارد عبر المصادر (CORS)، وأن هذا الفهم الخاطئ له نتائج أمنية حقيقية. والمثال المحوري في المقال هو ثغرة localhost في عميل زوم لسطح المكتب، التي أفصح عنها باحث الأمن جوناثان لايتشوخ في يوليو 2019.

فخ localhost في زوم

كان عميل زوم يثبّت على الجهاز خادم ويب يستمع على العنوان http://localhost:19421. وعندما يفتح المستخدم رابط زوم، يرسل موقع zoom.us طلباً إلى ذلك الخادم المحلي ليطلب منه تشغيل التطبيق الأصلي. وبدلاً من طلب AJAX عادي، كانت الصفحة تُحمّل صورة من الخادم المحلي، وأبعاد تلك الصورة ترمّز رمز الحالة أو الخطأ في الخادم. ورجّح لايتشوخ في مقاله أن ذلك جرى لتجاوز CORS، إذ إن المتصفحات، بحسب تعبيره، تتجاهل صراحة سياسة CORS للخوادم العاملة على localhost.

ويوضح فوستر أن هذا القول غير صحيح: فمتصفح كروم يحترم ترويسات CORS حتى لخوادم الويب المحلية، والطلبات عبر المصادر إلى localhost مدعومة في جميع المتصفحات؛ فالمطورون يفعلون ذلك باستمرار عندما تعمل واجهة Create React App على منفذ والـ API على منفذ آخر. ويرى أن حيلة الصورة تعني أن زوم إما لم تفهم CORS وإما تجاوزتها عن قصد، وكان الثمن باهظاً: فلم يكن zoom.us وحده قادراً على تشغيل عمليات في التطبيق الأصلي وقراءة الرد، بل أي موقع آخر على الإنترنت.

كيف يبدو التطبيق الآمن

ينبغي لخادم الويب المحلي أن يوفّر واجهة REST API وأن يرسل ترويسة Access-Control-Allow-Origin بالقيمة https://zoom.us، بحيث لا يتحدث إليه إلا كود JavaScript العامل في نطاق zoom.us. وإضافة إلى ذلك ينبغي لـ zoom.us أن ترسل ترويسة سياسة أمان المحتوى التي تمنع العرض داخل iframe، حتى لا تستطيع الصفحات فتح اجتماعات في الخلفية بصمت. ويبقى مع ذلك أن أي صفحة يمكنها تحويل المتصفح إلى رابط zoom.us لاجتماع غير متوقع؛ ويصنّف فوستر هذا كقرار يتعلق بتجربة المستخدم لا كثغرة برمجية، وهو يخالفه: يجب أن يكون البرنامج متوقعاً، ولا ينبغي أن يؤدي النقر على رابط إلى إتاحة الكاميرا والميكروفون للغرباء. ويقدّم نافذة Google Meet المنبثقة داخل التطبيق كمثال أفضل.

لماذا يستمر الالتباس

المشكلة لا تقتصر على زوم: فقد ضُبطت شركات أخرى بالثغرة نفسها تماماً، وموقع Stack Overflow مليء بأسئلة عن CORS تقترن غالباً بنصائح توصي بإعدادات افتراضية غير آمنة، مثل مثال Express المنشور على enable-cors.org، الذي يجعل التطبيق عرضة للخطر إذا نُسخ حرفياً. كذلك لا تصمد الأعذار التقنية: فقد يحجب فايرفوكس بعض الطلبات من مصدر آمن إلى مصدر غير آمن، لكنه يدعم localhost، ويمكن للتطبيقات الأصلية أن تنشئ شهادة موقّعة ذاتياً أو أن تأتي بإضافة للمتصفح. ويخلص فوستر إلى أن تجاوز سياسة المصدر نفسه قد يجعل الكود يعمل، لكنه يخلق مشكلات لاحقاً، وأنه لا يزال غير واضح ما إذا كانت CORS واجهة معقدة أكثر من اللازم أم أن التعليم الخاص بالمطورين هو ما يحتاج إلى تحسين.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.