هل يجب تعليق المكونات الإضافية المحفوظة من مستودع WordPress عند وجود مشكلة أمنية؟
نشرت: 2020-03-12في 27 فبراير 2020 ، في تمام الساعة 9:34 مساءً (بتوقيت وسط أوروبا) ، تلقينا بريدًا إلكترونيًا يخطرنا بأن المكون الإضافي WP Activity Log "تم سحبه مؤقتًا من دليل WordPress.org الإضافي بسبب استغلال" .
قدمنا إصلاحًا يوم الجمعة ، 28 فبراير 2020 ، الساعة 4:08 مساءً. استغرق الأمر منا 16.5 ساعة فقط لإصدار الإصلاح. كنا سنصلح المشكلة في وقت أبكر بكثير إذا حدث هذا أثناء ساعات العمل العادية (مقرنا في أوروبا) ، لأن لدينا وقت استجابة دعم جيد جدًا (مرجع).
تمت إعادة المكون الإضافي الخاص بنا يوم الاثنين 2 مارس 2020 الساعة 1:00 ظهرًا. هذا بعد 69 ساعة من إرسال الإصلاح. من المهم ملاحظة أن الفريق استغرق وقتًا طويلاً لإعادة المكون الإضافي بسبب عطلة نهاية الأسبوع.
لماذا أكتب هذا؟
أود أن أشير إلى أنني أعتقد أنه يجب تعليق المكونات الإضافية التي لم تتم صيانتها والتي بها مشكلات أمنية من مستودع WordPress. أيضًا ، لدي احترام كبير للعمل الذي يقوم به المتطوعون في فريق مراجعات البرنامج المساعد ، كما أنني أتحمل المسؤولية الكاملة عن مشكلة الأمان المبلغ عنها.
ومع ذلك ، أعتقد أنه قد يتم التعامل مع مشكلات الأمان المبلغ عنها في المكونات الإضافية التي يتم الاحتفاظ بها بشكل أفضل. نظرًا للطريقة التي يتم التعامل بها في الوقت الحالي ، فإن سمعة المكون الإضافي تتلقى نجاحًا سلبيًا كبيرًا ، ويتعرض مستخدموها ومواقعهم الإلكترونية للخطر. لذلك في نهاية هذا المنشور ، أسلط الضوء على بعض التحسينات الممكنة التي قد تساعد ، وأعتقد أنه ينبغي أخذها في الاعتبار. تكمن الفكرة في تعريض عدد أقل من المستخدمين للخطر ، وتقليل التأثير على المكون الإضافي والمطورين.
في هذا المنشور ، أقوم أيضًا بتوثيق جميع تفاصيل ما حدث ، وشرح حالة الضعف منخفضة الخطورة التي تم الإبلاغ عنها في المكون الإضافي الخاص بنا.
ما هو الإجراء للإبلاغ عن مشكلة أمان مكون إضافي في WordPress؟
من الإرشادات الرسمية في دليل البرنامج المساعد:
يجب إجراء كل محاولة للاتصال بالمطور مباشرةً قبل إبلاغنا عن المكون الإضافي (على الرغم من أننا نتفهم أن هذا قد يكون صعبًا - تحقق من الكود المصدري للمكون الإضافي أولاً ، يسرد العديد من المطورين رسائل البريد الإلكتروني الخاصة بهم). إذا لم تتمكن من الاتصال بهم بشكل خاص ، فيرجى الاتصال بنا مباشرة وسنساعدك.
ماذا حدث في حالتنا؟
لقد أوضحنا في الملحق من يقوم بتطوير المكون الإضافي. ما عليك سوى إلقاء نظرة على صفحة البرنامج المساعد في المستودع وستحصل على فكرة! كما نجعل من السهل جدًا الاتصال بنا.
ومع ذلك ، لم يقم أحد بالإبلاغ عن مشكلة الأمان إلينا قبل سحب المكون الإضافي مؤقتًا من مستودع المكونات الإضافية. لذلك أبلغ شخص ما عن المشكلة لفريق مراجعة مكونات WordPress الإضافية وقاموا بسحب المكون الإضافي مؤقتًا من المستودع دون أي إشعار مسبق.
قبل أن نتعمق في أسباب وماذا وما هو جيد وسيئ وما يمكن تحسينه ، دعنا نلقي نظرة على ثغرة البرنامج المساعد وشرح موجز لمن نحن.
ما كانت ثغرة البرنامج المساعد؟
لدينا معالج تثبيت في WP Activity Log لمساعدة المستخدمين على تكوين المكون الإضافي. يسمح لك أحد الإعدادات الموجودة في المعالج بالسماح للمستخدمين غير الإداريين بقراءة سجلات النشاط.
ومع ذلك ، فقد ارتكبنا خطأ. لم نتحقق مما إذا كان المستخدم الذي يقوم بتشغيل المعالج قد تمت مصادقته. لذلك يمكن للمستخدمين الذين لم تتم مصادقتهم تشغيل المعالج والسماح لمستخدم آخر أو دور آخر بالوصول إلى إعدادات المكون الإضافي. ومع ذلك ، فهذه حالة متطورة منخفضة الخطورة.
لماذا تعتبر هذه مشكلة أمان منخفضة الخطورة؟
لا يمكن للمهاجمين استغلال هذا إلا إذا:
- لم يكتمل معالج التثبيت من قبل المثبت ،
- كان للمهاجمين بالفعل مستخدم / لديه حق الوصول إلى مستخدم على موقع الويب ،
- يمكن للمهاجمين فقط الوصول إلى إعدادات البرنامج المساعد وسجل النشاط.
من خلال استغلال هذه المشكلات الأمنية ، لا يتمكن المهاجمون من الوصول إلى الامتيازات الأخرى على موقع WordPress الإلكتروني. لذلك ، لا يكون لهذا الاستغلال أي تأثير سلبي على سلوك الموقع الإلكتروني ووظائفه.
إثبات المفهوم
POC بسيط للغاية. قم بزيارة هذه الصفحة كمستخدم غير مصدق:
http://example.com/wp-admin/admin-post.php؟page=wsal-setup¤t-step=access
هذه هي خطوة المعالج التي تسمح لك بتحديد من يمكنه رؤية السجلات. ابحث عن "_wpnonce" في مصدر صفحة HTML ، وانسخها وأدخلها في الأمر curl التالي:
$ curl 'http://example.com/wp-admin/admin-post.php؟page=wsal-setup¤t-step=access' -d '_wpnonce = INSERT-NONCE-HERE & wsal-access = نعم والمحررين٪ 5B٪ 5D = Subscriber & save_step = التالي '
بمجرد تسجيل الدخول كمشترك ، سيكون لديك حق الوصول الكامل إلى إعدادات البرنامج المساعد.
لماذا نعتقد أن هذه القضية أسيء التعامل معها؟
في البريد الإلكتروني الذي أرسلناه ، كان هناك ما يلي:
نحن لا نغلق المكونات الإضافية على نحو خفيف ، وعندما يتعلق الأمر بقضايا الأمان ، نحاول تحقيق التوازن بين حجم المستخدمين وتاريخ المطورين مع خطورة واحتمالية تلف التقرير.
ومع ذلك ، أعتقد أنه تم سحب المكون الإضافي في وقت مبكر جدًا. بعيد جدا؛
- عندما كانت لدينا مشكلات في الماضي ، كنا نتعامل معها دائمًا في غضون ساعات قليلة. لقد فعلنا نفس الشيء هذه المرة.
- لقد قمنا بالرد دائمًا في الوقت المحدد عندما اتصل فريق مراجعة الإضافات.
- أثرت مشكلة الأمان فقط على المكون الإضافي الخاص بنا (منخفض الخطورة) وكانت حالة متطرفة.
- لا يمكن استغلال مشكلة الأمان تلقائيًا.
- الضرر الوحيد الذي يمكن للمهاجم فعله هو تغيير إعدادات البرنامج المساعد أو قراءة سجلات النشاط أو حذفها.
ما رأي المطورين الآخرين في مثل هذه المواقف؟
لقد قرأ معظمنا بالفعل مقالاً أو تغريدة أو رسالة على وسائل التواصل الاجتماعي حول قضايا مماثلة. ومع ذلك ، أردت أن أكتشف بنفسي ما يعتقده الآخرون ، وخاصة المطورين ، في هذا الأمر. أعتقد أن هذا مهم لأنه قد تكون هناك بعض الأشياء التي لا أراها.
في البداية ، أرسلت بريدًا إلكترونيًا إلى الشخص الذي حدد المشكلة ، شاكراً إياه على الإفصاح المسؤول. كان رده:
"مسرور لرؤيتك بسرعة تم حل المشكلة في المكون الإضافي. راجع للشغل ، لاحظت أن الأشخاص في wordpress.org أغلقوه لبضعة أيام ، وكان ذلك قاسيًا بعض الشيء ولم تكن هناك حاجة إليه حقًا. "- جيروم برانديت.
لقد أجريت أيضًا استطلاعًا صغيرًا على مجموعة Facebook Selling WordPress Products. على الرغم من أن هذه المجموعة صغيرة ، إلا أن غالبية أعضائها هم من مطوري الإضافات والقوالب. من الاستطلاع ، يمكننا أن نرى أن المطورين يتفقون بالإجماع على أنه في حالة حدوث مشكلات منخفضة إلى متوسطة الخطورة ، يجب الاتصال بالمطورين وإعطائهم فرصة لتقديم إصلاح وعدم سحب المكون الإضافي:
كيف يمكن تحسين هذه الإجراءات؟
على حد علمي ، لا توجد إجراءات موثقة عند قيام شخص ما بالإبلاغ عن مشكلة أمنية في مكون إضافي. إذا كانت هذه هي الحالة ، فقد تساعد الإجراءات مثل ما يلي المطورين كما تعرض عددًا أقل من الأشخاص للخطر.
اتصل بالمطورين ووافق على خطة عمل قبل إغلاق المكون الإضافي
يمكن لفريق مراجعة المكونات الإضافية محاولة الاتصال بالمطورين وتأكيد الثغرة الأمنية قبل إغلاق المكون الإضافي. يجب على المطورين الرد بخطة عمل ، بما في ذلك تاريخ معقول للإصلاح.
إذا لزم الأمر ، يمكن لفريق مراجعة الملحقات تحديد موعد نهائي. على سبيل المثال ، يجب أن يكون لدى المطورين ما بين 12 و 24 ساعة لإصلاح المشكلة. ومع ذلك ، في بعض الحالات قد يحتاجون إلى مزيد من الوقت ، اعتمادًا على المنطقة الزمنية التي يتواجدون فيها وما إلى ذلك. إذا فشل المطورون في الاستجابة ، فيجب سحب المكون الإضافي من المستودع.
تحديد مدى خطورة المشكلة الأمنية ونوعها
هذا يمكن أن يكون مفتوحا للنقاش. ومع ذلك ، يمكن لأي شخص لديه القليل من الخبرة الأمنية معرفة ما إذا كان يمكن استغلال مشكلة أمنية تم الإبلاغ عنها تلقائيًا ، وما إذا كانت حالة متطرفة أم لا ، وما هو تأثيرها من إثبات المفهوم المبلغ عنه (POC).
تحقق من التزام المطورين بخطة العمل
يجب أن يكون هناك نوع من التحقق في المكان لتأكيد قيام المطورين بإرسال الإصلاح في الوقت المحدد والتزامهم بأي مهام أخرى مدرجة في خطة العمل.
لا يساعد سحب الإضافات المحتفظ بها من المستودع
في حالة المكونات الإضافية التي تم الاحتفاظ بها ، فإن سحبها من المستودع يضر أكثر مما ينفع. فمثلا؛
- أنت تعلن أن المكون الإضافي به مشكلة ، على الأرجح مشكلة أمنية. هذا يثير الكثير من الإنذارات ويسلط الضوء على المكون الإضافي. يشبه هذا أيضًا دعوة المهاجمين وإخبارهم أن شيئًا ما في المكون الإضافي يمكن استغلاله.
- إنه يعرض قاعدة مستخدمي المكون الإضافي الحالي لأنه فجأة ، أصبحت مواقع الويب الخاصة بهم هدفًا. ليس لدى معظم المستخدمين أي فكرة عما يجب عليهم فعله ، خاصة إذا كانت وظيفة المكون الإضافي أساسية لموقعهم على الويب وأعمالهم.
- أنت تزيد من فرص تأخير الإصلاح. يحدث هذا عادةً بسبب نقص التواصل ، أو بسبب العطلات وعطلات نهاية الأسبوع.
قد يجادل المرء بأنه من خلال سحب مكون إضافي من المستودع ، فإنك تمنع انتشار العدوى . ومع ذلك ، إذا كانت مشكلة الأمان منخفضة الخطورة ، فلا يمكن أتمتة الاستغلال ، ويكون الكشف مسؤولاً ، ولا توجد مخاطر متضمنة ، أو تكون المخاطر منخفضة للغاية.
إخلاء المسئولية: هذا ليس هجومًا
أود أن أشير إلى أن هذا ليس هجومًا ضد فريق مراجعة إضافات WordPress أو أي شخص مشارك في هذه العمليات. أنا بصراحة أحترم عملهم وأعلم أن ما يفعلونه يتم بحسن نية. ومع ذلك ، هناك بالتأكيد مكان للتحسين ، كما هو الحال في أي نظام وعملية أخرى.
سيخبرني الكثير على الأرجح أنه إذا أردت تغييرًا ، يجب أن أتطوع بدلاً من كتابة هذا المنشور.
لقد كنت أحاول الانضمام لبعض الوقت ؛ لقد تحدثت إلى العديد من الأشخاص في WordCamps مختلفة للمشاركة ، كما كنت أراقب صفحة Make WordPress plugins لإجراء مكالمات للمتطوعين. ومع ذلك ، في السنوات القليلة الماضية لم يكن لديهم أي شواغر. عندما احتاجوا للمساعدة قاموا بإضافة أعضاء جدد عن طريق الدعوة فقط.