Masalah Keamanan Ditambal di Plugin Umpan Pos Sosial Smash Balloon

Diterbitkan: 2021-10-29

Selama audit internal plugin Smash Balloon Social Post Feed (juga dikenal sebagai Custom Facebook Feed), kami menemukan beberapa titik akhir AJAX yang sensitif dapat diakses oleh pengguna mana pun yang memiliki akun di situs yang rentan, seperti pelanggan. Beberapa dari titik akhir ini dapat mengaktifkan serangan Stored Cross-Site Scripting (XSS) terjadi.

Serangan XSS Tersimpan yang berhasil dapat memungkinkan pelaku jahat untuk menyimpan skrip berbahaya di setiap pos dan halaman situs yang terpengaruh. Jika administrator yang masuk mengunjungi salah satu URL yang terpengaruh, skrip dapat berjalan di browser mereka dan melakukan tindakan administratif atas nama mereka, seperti membuat administrator baru dan memasang plugin jahat.

Kami melaporkan kerentanan kepada pembuat plugin ini melalui email, dan mereka baru-baru ini merilis versi 4.0.1 untuk mengatasinya. Kami sangat menyarankan Anda memperbarui ke versi terbaru plugin Smash Balloon Social Post Feed dan memiliki solusi keamanan yang mapan di situs Anda, seperti Jetpack Security.

rincian

Nama Plugin: Smash Balloon Social Post Feed
URI Plugin: https://wordpress.org/plugins/custom-facebook-feed/
Pengarang: Smash Balloon
Penulis URI: https://smashballoon.com/

Kerentanan

Skrip Lintas Situs yang Disimpan melalui Pembaruan Pengaturan Sewenang-wenang

Versi yang terpengaruh: < 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()
                ) );
        }

Tindakan AJAX wp_ajax_cff_save_settings , yang bertanggung jawab untuk memperbarui pengaturan dalam plugin, tidak melakukan pemeriksaan hak istimewa atau nonce apa pun sebelum melakukannya. Ini memungkinkan setiap pengguna yang masuk untuk memanggil tindakan ini dan memperbarui pengaturan plugin apa pun.

Sayangnya, salah satu pengaturan ini, customJS , memungkinkan administrator untuk menyimpan JavaScript khusus di pos dan halaman situs mereka. Memperbarui pengaturan ini adalah semua yang diperlukan aktor jahat untuk menyimpan skrip berbahaya di situs.

Linimasa

2021-10-14 – Kontak awal dengan Smash Balloon
2021-10-18 – Kami mengirimi mereka detail tentang kerentanan ini
2021-10-21 – Smash Balloon Social Post Feed 4.0.1 dirilis

Kesimpulan

Kami menyarankan Anda memeriksa versi plugin Smash Balloon Social Post Feed yang digunakan situs Anda, dan jika kurang dari 4.0.1, perbarui sesegera mungkin!

Di Jetpack, kami bekerja keras untuk memastikan situs web Anda terlindungi dari jenis kerentanan ini. Kami menyarankan Anda memiliki rencana keamanan untuk situs Anda yang mencakup pemindaian dan pencadangan file berbahaya. Jetpack Security adalah salah satu opsi keamanan WordPress yang bagus untuk memastikan situs dan pengunjung Anda aman.

kredit

Peneliti asli: Marc Montpas

Terima kasih kepada tim Jetpack Scan lainnya atas umpan balik, bantuan, dan koreksinya.