Problemas de segurança corrigidos no plug-in Smash Balloon Social Post Feed

Publicados: 2021-10-29

Durante uma auditoria interna do plug-in Smash Balloon Social Post Feed (também conhecido como Custom Facebook Feed), descobrimos que vários endpoints AJAX sensíveis estavam acessíveis a qualquer usuário com uma conta no site vulnerável, como assinantes. Alguns desses terminais podem permitir a ocorrência de ataques de scripts entre sites armazenados (XSS).

Um ataque de XSS armazenado bem-sucedido pode permitir que atores mal-intencionados armazenem scripts maliciosos em cada postagem e página do site afetado. Se um administrador conectado visitar uma das URLs afetadas, o script poderá ser executado em seu navegador e executar ações administrativas em seu nome, como criar novos administradores e instalar plug-ins não autorizados.

Relatamos as vulnerabilidades ao autor deste plugin por e-mail, e eles lançaram recentemente a versão 4.0.1 para resolvê-las. É altamente recomendável que você atualize para a versão mais recente do plug-in Smash Balloon Social Post Feed e tenha uma solução de segurança estabelecida em seu site, como o Jetpack Security.

Detalhes

Nome do plug-in: Smash Balloon Social Post Feed
URI do plug-in: https://wordpress.org/plugins/custom-facebook-feed/
Autor: Smash Balloon
URI do autor: https://smashballoon.com/

As vulnerabilidades

Scripts entre sites armazenados por meio de atualização de configuração arbitrária

Versões afetadas: < 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()
                ) );
        }

A ação AJAX wp_ajax_cff_save_settings , que é responsável por atualizar as configurações internas do plugin, não executou nenhuma verificação de privilégios ou nonce antes de fazê-lo. Isso possibilitou que qualquer usuário logado chamasse essa ação e atualizasse qualquer uma das configurações do plug-in.

Infelizmente, uma dessas configurações, customJS , permite que os administradores armazenem JavaScript personalizado nas postagens e páginas de seu site. Atualizar essa configuração é tudo o que seria necessário para um agente mal-intencionado armazenar scripts maliciosos no site.

Linha do tempo

14/10/2021 – Contato inicial com Smash Balloon
18-10-2021 – Enviamos a eles detalhes sobre essas vulnerabilidades
21/10/2021 – O feed de postagem social do Smash Balloon 4.0.1 é lançado

Conclusão

Recomendamos que você verifique qual versão do plugin Smash Balloon Social Post Feed seu site está usando e, se for inferior a 4.0.1, atualize-o o mais rápido possível!

Na Jetpack, trabalhamos duro para garantir que seus sites estejam protegidos contra esses tipos de vulnerabilidades. Recomendamos que você tenha um plano de segurança para seu site que inclua verificação e backups de arquivos maliciosos. O Jetpack Security é uma ótima opção de segurança do WordPress para garantir que seu site e visitantes estejam seguros.

Créditos

Pesquisador original: Marc Montpas

Agradecemos ao restante da equipe do Jetpack Scan pelos comentários, ajuda e correções.