ثغرة أمنية ![]()
ملخص سريع: تثبيت هذه الإضافة سيؤدي - حتى عند تعطيلها - إلى تسريب جميع الحقول المخصصة للموضوع الموجودة إلى أي شخص يمكنه الوصول إلى الموضوع، بما في ذلك المستخدمون المجهولون. اعتمادًا على الإضافات الأخرى المثبتة لديك، يمكن أن تحتوي الحقول المخصصة للموضوع على بيانات حساسة.
عند فحص هذه الإضافة لأحد العملاء، اكتشفنا عددًا من المشكلات الأمنية. لقد قمنا بإصلاح هذه المشكلات في نسختنا (https://github.com/communiteq/discourse-topic-trade-buttons/tree/master) وقدمنا طلب سحب (pull request). ومع ذلك، لم يستجب مؤلف الموضوع لطلب السحب الخاص بنا أو رسالتنا الخاصة، لذلك نقوم الآن بالكشف عن هذه المشكلات.
إصلاح أمني: تسرب المعلومات
يتم تسلسل جميع الحقول المخصصة (بما في ذلك تلك الواردة من إضافات أخرى!)، بما في ذلك للمستخدمين المجهولين. يمكن أن تحتوي الحقول المخصصة على بيانات حساسة ويجب عدم تسلسلها بهذه الطريقة أبدًا.
نظرًا لأن قيم sold_at وما إلى ذلك يتم تعيينها من جانب الخادم على أي حال ويتم “حساب” الأزرار عند topic.archived، يمكن إزالة منطق الحقول المخصصة من كود الواجهة الأمامية الذي يواجهه المستخدم، وتحتاج الحقول المخصصة فقط إلى التسلسل لواجهة المسؤول للعمل - وبالتالي يمكن قصر التسلسل على المستخدمين المسؤولين. نشك في أن هذا ليس ضروريًا أيضًا.
إصلاحات التهيئة
التحقق if SiteSetting.topic_trade_buttons_enabled الذي يحيط بمنطق التسلسل يجعل من الضروري إعادة تشغيل Discourse بعد تمكين أو تعطيل الإضافة. هذا التحقق غير ضروري لأن Discourse يعتني بذلك بالفعل.
استخدام respect_plugin_enabled: false غير ضروري ويزيد من تفاقم المشكلة الأمنية الموضحة أعلاه.