Smash Balloon Social Post Feed Eklentisinde Güvenlik Sorunları Eklendi

Yayınlanan: 2021-10-29

Smash Balloon Social Post Feed eklentisinin (Özel Facebook Feed olarak da bilinir) dahili denetimi sırasında, aboneler gibi savunmasız sitede hesabı olan herhangi bir kullanıcının birkaç hassas AJAX uç noktasına erişebildiğini keşfettik. Bu uç noktalardan bazıları Depolanmış Siteler Arası Komut Dosyası Çalıştırma (XSS) saldırılarının gerçekleşmesini sağlayabilir.

Başarılı bir Stored XSS saldırısı, kötü niyetli kişilerin etkilenen sitenin her gönderisinde ve sayfasında kötü amaçlı komut dosyaları depolamasına olanak sağlayabilir. Oturum açmış bir yönetici, etkilenen URL'lerden birini ziyaret ederse, komut dosyası tarayıcılarında çalışabilir ve yeni yöneticiler oluşturmak ve sahte eklentiler yüklemek gibi yönetici eylemleri onların adına yürütebilir.

Bu eklentinin yazarına güvenlik açıklarını e-posta yoluyla bildirdik ve kısa süre önce bunları gidermek için 4.0.1 sürümünü yayınladılar. Smash Balloon Social Post Feed eklentisinin en son sürümüne güncelleme yapmanızı ve sitenizde Jetpack Security gibi yerleşik bir güvenlik çözümüne sahip olmanızı şiddetle tavsiye ederiz.

Detaylar

Eklenti Adı: Smash Balloon Social Post Feed
Eklenti URI'si: https://wordpress.org/plugins/custom-facebook-feed/
Yazar: Smash Balloon
Yazar URI'si: https://smashballoon.com/

Güvenlik Açıkları

Keyfi Ayar Güncellemesi ile Depolanan Siteler Arası Komut Dosyası

Etkilenen sürümler: < 4.0.1
CVE-ID: 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()
                ) );
        }

Eklentinin iç ayarlarını güncellemekten sorumlu olan wp_ajax_cff_save_settings AJAX eylemi, bunu yapmadan önce herhangi bir ayrıcalık veya nonce kontrolü gerçekleştirmedi. Bu, oturum açmış herhangi bir kullanıcının bu eylemi çağırmasını ve eklentinin ayarlarından herhangi birini güncellemesini mümkün kıldı.

Ne yazık ki, bu ayarlardan biri olan customJS , yöneticilerin sitelerinin gönderilerinde ve sayfalarında özel JavaScript depolamasına olanak tanır. Bu ayarı güncellemek, kötü bir oyuncunun sitede kötü amaçlı komut dosyaları depolaması için gereken tek şeydir.

Zaman çizelgesi

2021-10-14 – Smash Balloon ile ilk temas
2021-10-18 – Onlara bu güvenlik açıklarıyla ilgili ayrıntıları gönderiyoruz
2021-10-21 – Smash Balloon Social Post Feed 4.0.1 yayınlandı

Çözüm

Sitenizin Smash Balloon Social Post Feed eklentisinin hangi sürümünü kullandığını kontrol etmenizi ve 4.0.1'den düşükse en kısa sürede güncellemenizi öneririz!

Jetpack'te web sitelerinizin bu tür güvenlik açıklarından korunmasını sağlamak için çok çalışıyoruz. Siteniz için kötü amaçlı dosya tarama ve yedeklemeler içeren bir güvenlik planınız olmasını öneririz. Jetpack Security, sitenizin ve ziyaretçilerinizin güvende olmasını sağlamak için harika bir WordPress güvenlik seçeneğidir.

Kredi

Orijinal araştırmacı: Marc Montpas

Geri bildirim, yardım ve düzeltmeler için Jetpack Scan ekibinin geri kalanına teşekkür ederiz.