Problèmes de sécurité corrigés dans le plugin Smash Balloon Social Post Feed
Publié: 2021-10-29Lors d'un audit interne du plug-in Smash Balloon Social Post Feed (également appelé flux Facebook personnalisé), nous avons découvert que plusieurs points de terminaison AJAX sensibles étaient accessibles à tous les utilisateurs disposant d'un compte sur le site vulnérable, comme les abonnés. Certains de ces points de terminaison pourraient permettre à des attaques de type Stored Cross-Site Scripting (XSS) de se produire.
Une attaque XSS stockée réussie pourrait permettre aux acteurs malveillants de stocker des scripts malveillants sur chaque publication et page du site affecté. Si un administrateur connecté visite l'une des URL concernées, le script peut s'exécuter sur son navigateur et exécuter des actions administratives en son nom, comme la création de nouveaux administrateurs et l'installation de plugins malveillants.
Nous avons signalé les vulnérabilités à l'auteur de ce plugin par e-mail, et ils ont récemment publié la version 4.0.1 pour y remédier. Nous vous recommandons fortement de mettre à jour vers la dernière version du plugin Smash Balloon Social Post Feed et d'avoir une solution de sécurité établie sur votre site, telle que Jetpack Security.
Des détails
Nom du plugin : Smash Balloon Social Post Feed
URI du plugin : https://wordpress.org/plugins/custom-facebook-feed/
Auteur : Smash Balloon
URI de l'auteur : https://smashballoon.com/
Les vulnérabilités
Script intersite stocké via la mise à jour des paramètres arbitraires
Versions concernées : < 4.0.1
ID 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()
) );
}
L'action AJAX wp_ajax_cff_save_settings
, qui est responsable de la mise à jour des paramètres internes du plugin, n'a effectué aucune vérification de privilège ou nonce avant de le faire. Cela a permis à tous les utilisateurs connectés d'appeler cette action et de mettre à jour tous les paramètres du plugin.

Malheureusement, l'un de ces paramètres, customJS
, permet aux administrateurs de stocker du JavaScript personnalisé sur les publications et les pages de leur site. La mise à jour de ce paramètre est tout ce qu'il aurait fallu à un mauvais acteur pour stocker des scripts malveillants sur le site.
Chronologie
2021-10-14 – Premier contact avec Smash Balloon
2021-10-18 – Nous leur envoyons des détails sur ces vulnérabilités
2021-10-21 - Sortie du flux de publication sociale Smash Balloon 4.0.1
Conclusion
Nous vous recommandons de vérifier quelle version du plugin Smash Balloon Social Post Feed votre site utilise, et si elle est inférieure à 4.0.1, mettez-la à jour dès que possible !
Chez Jetpack, nous travaillons dur pour nous assurer que vos sites Web sont protégés contre ces types de vulnérabilités. Nous vous recommandons d'avoir un plan de sécurité pour votre site qui inclut l'analyse et la sauvegarde des fichiers malveillants. Jetpack Security est une excellente option de sécurité WordPress pour garantir la sécurité de votre site et de vos visiteurs.
Crédits
Chercheur original : Marc Montpas
Merci au reste de l'équipe Jetpack Scan pour les commentaires, l'aide et les corrections.