تم تصحيح مشكلات الأمان في البرنامج المساعد لخلاصة المشاركة في سماش بالون الاجتماعي

نشرت: 2021-10-29

أثناء التدقيق الداخلي للمكوِّن الإضافي Smash Balloon Social Post Feed (المعروف أيضًا باسم Custom Facebook Feed) ، اكتشفنا أن العديد من نقاط نهاية AJAX الحساسة يمكن الوصول إليها من قبل أي مستخدم لديه حساب على الموقع الضعيف ، مثل المشتركين. يمكن لبعض نقاط النهاية هذه تمكين هجمات Scored Cross-Site Scripting (XSS).

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

أبلغنا مؤلف هذا المكون الإضافي عن الثغرات الأمنية عبر البريد الإلكتروني ، وأصدروا مؤخرًا الإصدار 4.0.1 لمعالجتها. نوصي بشدة أن تقوم بالتحديث إلى أحدث إصدار من البرنامج المساعد Smash Balloon Social Post Feed وأن يكون لديك حل أمان ثابت على موقعك ، مثل Jetpack Security.

تفاصيل

اسم البرنامج المساعد: Smash Balloon Social Post Feed
عنوان URI للمكون الإضافي: https://wordpress.org/plugins/custom-facebook-feed/
المؤلف: سماش بالون
عنوان URI للمؤلف: https://smashballoon.com/

نقاط الضعف

البرمجة النصية عبر المواقع المخزنة عبر تحديث الإعداد التعسفي

الإصدارات المتأثرة: <4.0.1
معرف CVE: CVE-2021-24918
CVSSv3.1: 7.3
CWSS: 80.6

        public function cff_save_settings() {
                $data = $_POST;
                $model = isset( $data[ 'model' ] ) ? $data['model'] : null;
                // return if the model is null
                if ( null === $model ) {
                        return;
                }
                
                // (...)

                $model = (array) \json_decode( \stripslashes( $model ) );
                $general = (array) $model['general'];
                $feeds = (array) $model['feeds'];
                $translation = (array) $model['translation'];
                $advanced = (array) $model['advanced'];
                // Get the values and sanitize
                $cff_locale                                                     = sanitize_text_field( $feeds['selectedLocale'] );
                $cff_style_settings                                     = get_option( 'cff_style_settings' );
                $cff_style_settings[ 'cff_timezone' ]   = sanitize_text_field( $feeds['selectedTimezone'] );
                $cff_style_settings[ 'cff_custom_css' ] = $feeds['customCSS'];
                $cff_style_settings[ 'cff_custom_js' ]  = $feeds['customJS'];
                $cff_style_settings[ 'gdpr' ]                   = sanitize_text_field( $feeds['gdpr'] );
                $cachingType                                                    = sanitize_text_field( $feeds['cachingType'] );
                $cronInterval                                                   = sanitize_text_field( $feeds['cronInterval'] );
                $cronTime                                                               = sanitize_text_field( $feeds['cronTime'] );
                $cronAmPm                                                               = sanitize_text_field( $feeds['cronAmPm'] );
                $cacheTime                                                              = sanitize_text_field( $feeds['cacheTime'] );
                $cacheTimeUnit                                                  = sanitize_text_field( $feeds['cacheTimeUnit'] );
                // Save general settings data
                update_option( 'cff_preserve_settings', $general['preserveSettings'] );
                // Save feeds settings data
                update_option( 'cff_locale', $cff_locale );

                // (...)

                // Save translation settings data
                foreach( $translation as $key => $val ) {
                        $cff_style_settings[ $key ] = $val;
                }
                // Save advanced settings data
                $cff_ajax = sanitize_text_field( $advanced['cff_ajax'] );
                foreach( $advanced as $key => $val ) {
                        if ( $key == 'cff_disable_resize' || $key == 'disable_admin_notice' ) {
                                $cff_style_settings[ $key ] = !$val;
                        } else {
                                $cff_style_settings[ $key ] = $val;
                        }
                }

                // (...)

                update_option( 'cff_ajax', $cff_ajax );
                // Update the cff_style_settings option that contains data for translation and advanced tabs
                update_option( 'cff_style_settings', $cff_style_settings );
                // clear cron caches
                $this->cff_clear_cache();
                new CFF_Response( true, array(
                        'cronNextCheck' => $this->get_cron_next_check()
                ) );
        }

لم يقم إجراء wp_ajax_cff_save_settings AJAX ، المسؤول عن تحديث الإعدادات الداخلية للمكون الإضافي ، بأداء أي امتيازات أو فحوصات غير متوقعة قبل القيام بذلك. وقد أتاح هذا لأي مستخدم قام بتسجيل الدخول الاتصال بهذا الإجراء وتحديث أي من إعدادات المكون الإضافي.

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

الجدول الزمني

2021-10-14 - الاتصال الأولي بـ Smash Balloon
2021-10-18 - نرسل لهم تفاصيل حول نقاط الضعف هذه
2021-10-21 - تم إصدار 4.0.1 لـ Smash Balloon Social Post Feed

خاتمة

نوصيك بالتحقق من إصدار المكون الإضافي Smash Balloon Social Post Feed الذي يستخدمه موقعك ، وإذا كان أقل من 4.0.1 ، فقم بتحديثه في أقرب وقت ممكن!

في Jetpack ، نعمل بجد للتأكد من حماية مواقع الويب الخاصة بك من هذه الأنواع من الثغرات الأمنية. نوصي بأن يكون لديك خطة أمان لموقعك تتضمن فحص الملفات الضارة والنسخ الاحتياطي. Jetpack Security هو أحد خيارات الأمان الرائعة في WordPress لضمان أمان موقعك وزوارك.

الاعتمادات

الباحث الأصلي: مارك مونباس

شكرًا لبقية فريق Jetpack Scan على التعليقات والمساعدة والتصحيحات.