Израильский исследователь Барак Тавили (Barak Tawily), известный в Сети как Quitten, обнаружил в WordPress незакрытую уязвимость, позволяющую без особого труда вызвать отказ в обслуживании на сервере. По словам автора находки, данная брешь (CVE-2018-6389) актуальна почти для всех WordPress-сайтов. Согласно WordPress.com, в настоящее время эту CMS-систему используют 29% сайтов в Интернете.

В своем блоге Тавили пояснил, что найденная им DoS-уязвимость связана с обработкой запросов на подключение JavaScript или CSS при загрузке страниц. Используемым при этом WordPress-скриптам load-scripts.php и load-styles.php в параметре load[] передается информация о том, какие JavaScript или стили нужно получить. PHP-сценарии объединяют указанные значения, и в итоге клиенту возвращается один файл. Такая возможность позволяет уменьшить нагрузку на сервер и повысить скорость загрузки страниц.

По свидетельству Тавили, данная функция WordPress предназначена для использования в админ-панели, однако оказалось, что она также доступна на странице входа wp-login.php, то есть для ее использования не требуется аутентификация.

В ходе анализа исследователю также удалось обнаружить вшитый в код полный список скриптов wp_scripts, определенный в файле script-loader.php. Этот список содержит 181 значение, и каждое можно передать на сервер в качестве load-параметра. Тавили решил проверить, что будет, если запросить сразу все JS-модули — ведь серверу в ответ на единственный запрос придется выполнить 181 действие по вводу-выводу.

Ответ был получен через 2,2 секунды и содержал около 4 Мбайт данных. А если повторять такие запросы? Чтобы не делать это вручную, исследователь применил написанный им ранее Python-скрипт и в итоге добился отказа в обслуживании: атакуемый сервер был слишком занят, чтобы обрабатывать другие запросы. После 500 автоматизированных таким образом запросов мишень перестала отвечать и лишь изредка возвращала ошибки 502, 503 и 504.

О своей находке Тавили сообщил команде WordPress через их программу bug bounty, хотя знал, что DoS-баги к рассмотрению не принимаются. В отчет исследователь включил PoC в надежде, что серьезность проблемы заставит разработчиков задуматься об адекватном решении. Однако получатели отказались признать это уязвимостью, заявив: «Подобные проблемы следует решать на уровне сервера или сети, а не приложений, они находятся вне контроля WordPress».

В результате Тавили создал форк в WordPress-проекте и залатал его таким образом, чтобы доступ к файлам load-*.php можно было получить лишь после аутентификации. По уверениям исследователя, его патч не оказывает негативного влияния на функциональность файла wp-login.php. Исправленная версия WordPress выложена на GitHub и рекомендуется к использованию. Для WordPress-сайтов, работающих на машинах Linux, Тавили предлагает bash-скрипт, который модифицирует соответствующие файлы, снижая риск эксплойта.

Категории: Аналитика, Уязвимости