Smash Balloon SocialPostFeedプラグインでパッチが適用されたセキュリティの問題

公開: 2021-10-29

Smash Balloon Social Post Feedプラグイン(カスタムFacebookフィードとも呼ばれます)の内部監査中に、サブスクライバーなど、脆弱なサイトのアカウントを持つすべてのユーザーがいくつかの機密性の高いAJAXエンドポイントにアクセスできることを発見しました。 これらのエンドポイントの一部は、ストアードクロスサイトスクリプティング(XSS)攻撃の発生を可能にする可能性があります。

Stored XSS攻撃が成功すると、悪意のある攻撃者が影響を受けるサイトのすべての投稿とページに悪意のあるスクリプトを保存できるようになる可能性があります。 ログインした管理者が影響を受けるURLの1つにアクセスすると、スクリプトがブラウザで実行され、新しい管理者の作成や不正なプラグインのインストールなどの管理アクションが実行される場合があります。

このプラグインの作成者に電子メールで脆弱性を報告し、最近、それらに対処するためにバージョン4.0.1をリリースしました。 Smash Balloon Social Post Feedプラグインの最新バージョンに更新し、JetpackSecurityなどの確立されたセキュリティソリューションをサイトに用意することを強くお勧めします。

詳細

プラグイン名: Smash Balloon Social Post Feed
プラグインURI: https://wordpress.org/plugins/custom-facebook-feed/
著者:スマッシュバルーン
著者URI: https://smashballoon.com/

脆弱性

任意の設定の更新による保存されたクロスサイトスクリプティング

影響を受けるバージョン: <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()
                ) );
        }

プラグインの内部設定の更新を担当するwp_ajax_cff_save_settingsアクションは、実行する前に特権またはナンスチェックを実行しませんでした。 これにより、ログインしているすべてのユーザーがこのアクションを呼び出して、プラグインの設定を更新できるようになりました。

残念ながら、これらの設定の1つであるcustomJSを使用すると、管理者はカスタムJavaScriptをサイトの投稿やページに保存できます。 この設定を更新するだけで、悪意のある攻撃者が悪意のあるスクリプトをサイトに保存することができます。

タイムライン

2021-10-14 –スマッシュバルーンとの最初の接触
2021-10-18 –これらの脆弱性に関する詳細を送信します
2021-10-21 – Smash Balloon Social PostFeed4.0.1がリリースされました

結論

サイトで使用しているSmashBalloonSocial Post Feedプラグインのバージョンを確認し、4.0.1未満の場合は、できるだけ早く更新することをお勧めします。

Jetpackでは、お客様のWebサイトがこれらのタイプの脆弱性から保護されるように努めています。 悪意のあるファイルのスキャンとバックアップを含むサイトのセキュリティ計画を立てることをお勧めします。 Jetpack Securityは、サイトと訪問者の安全を確保するための優れたWordPressセキュリティオプションの1つです。

クレジット

元の研究者:マーク・モンパス

フィードバック、ヘルプ、および修正を提供してくれたJetpackScanチームの残りのメンバーに感謝します。