Probleme de securitate soluționate în pluginul Smash Balloon Social Post Feed
Publicat: 2021-10-29În timpul unui audit intern al pluginului Smash Balloon Social Post Feed (cunoscut și sub numele de Custom Facebook Feed), am descoperit că mai multe puncte finale AJAX sensibile erau accesibile oricăror utilizatori cu un cont pe site-ul vulnerabil, cum ar fi abonații. Unele dintre aceste puncte finale ar putea permite să apară atacuri cu scripturi încrucișate stocate (XSS).
Un atac de succes Stored XSS ar putea permite actorilor răi să stocheze scripturi rău intenționate pe fiecare postare și pagină a site-ului afectat. Dacă un administrator conectat vizitează una dintre adresele URL afectate, scriptul poate rula în browserul său și poate executa acțiuni administrative în numele său, cum ar fi crearea de noi administratori și instalarea de pluginuri necinstite.
Am raportat vulnerabilitățile autorului acestui plugin prin e-mail și au lansat recent versiunea 4.0.1 pentru a le rezolva. Vă recomandăm insistent să actualizați la cea mai recentă versiune a pluginului Smash Balloon Social Post Feed și să aveți o soluție de securitate stabilită pe site-ul dvs., cum ar fi Jetpack Security.
Detalii
Nume plugin: Smash Balloon Social Post Feed
URI plugin: https://wordpress.org/plugins/custom-facebook-feed/
Autor: Smash Balloon
URI autor: https://smashballoon.com/
Vulnerabilitățile
Stocat Cross-Site Scripting prin Actualizare de setări arbitrare
Versiuni afectate: < 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()
) );
}
Acțiunea AJAX wp_ajax_cff_save_settings
, care este responsabilă pentru actualizarea setărilor interne ale pluginului, nu a efectuat niciun privilegiu sau verificări nonce înainte de a face acest lucru. Acest lucru a făcut posibil ca orice utilizator conectat să apeleze această acțiune și să actualizeze oricare dintre setările pluginului.

Din păcate, una dintre aceste setări, customJS
, permite administratorilor să stocheze JavaScript personalizat pe postările și paginile site-ului lor. Actualizarea acestei setări este tot ceea ce ar fi fost nevoie pentru ca un actor rău să stocheze scripturi rău intenționate pe site.
Cronologie
2021-10-14 – Contactul inițial cu Smash Balloon
2021-10-18 – Le trimitem detalii despre aceste vulnerabilități
2021-10-21 – Smash Balloon Social Post Feed 4.0.1 este lansat
Concluzie
Vă recomandăm să verificați ce versiune a pluginului Smash Balloon Social Post Feed folosește site-ul dvs. și, dacă este mai mică de 4.0.1, actualizați-o cât mai curând posibil!
La Jetpack, muncim din greu pentru a ne asigura că site-urile dvs. sunt protejate de aceste tipuri de vulnerabilități. Vă recomandăm să aveți un plan de securitate pentru site-ul dvs. care să includă scanarea fișierelor rău intenționate și backup-uri. Jetpack Security este o opțiune excelentă de securitate WordPress pentru a vă asigura că site-ul și vizitatorii sunt în siguranță.
credite
Cercetator original: Marc Montpas
Mulțumim restului echipei Jetpack Scan pentru feedback, ajutor și corecții.