Проблемы безопасности исправлены в плагине Smash Balloon Social Post Feed
Опубликовано: 2021-10-29Во время внутреннего аудита плагина Smash Balloon Social Post Feed (также известного как Custom Facebook Feed) мы обнаружили, что несколько конфиденциальных конечных точек AJAX были доступны для любых пользователей с учетной записью на уязвимом сайте, таких как подписчики. Некоторые из этих конечных точек могут привести к возникновению атак Stored Cross-Site Scripting (XSS).
Успешная атака Stored XSS может позволить злоумышленникам хранить вредоносные скрипты в каждом посте и на каждой странице уязвимого сайта. Если администратор, вошедший в систему, посещает один из затронутых URL-адресов, сценарий может запускаться в его браузере и выполнять административные действия от его имени, такие как создание новых администраторов и установка мошеннических плагинов.
Мы сообщили об уязвимостях автору этого плагина по электронной почте, и недавно они выпустили версию 4.0.1 для их устранения. Мы настоятельно рекомендуем вам обновить плагин Smash Balloon Social Post Feed до последней версии и установить на своем сайте надежное решение для обеспечения безопасности, такое как Jetpack Security.
Подробности
Название плагина: 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
КВСС: 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()
) );
}
Действие AJAX wp_ajax_cff_save_settings
, отвечающее за обновление внутренних настроек плагина, перед этим не выполняло никаких проверок привилегий или одноразовых номеров. Это позволило любому вошедшему в систему пользователю вызвать это действие и обновить любые настройки плагина.

К сожалению, один из этих параметров, customJS
, позволяет администраторам сохранять пользовательский код JavaScript в сообщениях и на страницах своего сайта. Обновление этого параметра — все, что нужно злоумышленнику, чтобы сохранить вредоносные скрипты на сайте.
График
14.10.2021 — Первый контакт с Smash Balloon
2021-10-18 — Мы отправляем им подробную информацию об этих уязвимостях.
21.10.2021 — Выпущена лента социальных сообщений Smash Balloon 4.0.1.
Вывод
Мы рекомендуем вам проверить, какую версию плагина Smash Balloon Social Post Feed использует ваш сайт, и если она меньше 4.0.1, как можно скорее обновите ее!
В Jetpack мы прилагаем все усилия, чтобы ваши веб-сайты были защищены от уязвимостей такого типа. Мы рекомендуем вам иметь план безопасности для вашего сайта, который включает сканирование вредоносных файлов и резервное копирование. Jetpack Security — это отличный вариант безопасности WordPress для обеспечения безопасности вашего сайта и посетителей.
Кредиты
Оригинальный исследователь: Марк Монпас
Спасибо остальной команде Jetpack Scan за отзывы, помощь и исправления.