DoS-уязвимость в WordPress позволяет «уронить» практически любой сайт
ИТ-Безопасность
Независимый израильский ИБ-специалист Барак Тавайли (Barak Tawily) обнаружил и подробно описал в своем блоге критическую DoS-уязвимость в WordPress CMS.

Баг получил идентификатор CVE-2018-6389 и представляет опасность для всех версий WordPress, вышедших за последние девять лет (включая наиболее свежий релиз 4.9.2).

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

В зависимости от установленных модулей и плагинов, load-scripts.php выборочно подгружает различные файлы JavaScript, чьи имена перечисляются через запятую после параметра «load». То есть URL должен выглядеть следующим образом:

https://your-wordpress-site.com/wp-admin/load-scripts.php?c=1&load=editor,common,user-profile,media-widgets,media-gallery

Так, во время загрузки сайта, load-scripts.php пытается отыскать каждый из перечисленных в URL файлов JavaScript, чтобы «отдать» их браузеру пользователя в виде одного файла.

Тавайли обнаружил, что атакующий может заставить load-scripts.php загрузить все возможные файлы JavaScript вообще, просто перечислив их в URL. Из-за этого атакуемый сайт может начать работать значительно медленнее, поглощая все больше и больше мощностей сервера. Разумеется, при помощи одного такого запроса злоумышленнику не удастся спровоцировать отказ в обслуживании, однако исследователь создал proof-of-concept эксплоит: простой скрипт doser.py, написанный на Python. Скрипт отправляет множество подобных запросов целевому URL. Примерно после 500 запроса средний сайт, работающий на VPS-сервере, перестает отвечать вовсе, «отдавая» лишь ошибки 502, 503 и 504.

Специалист отмечает, что с одного компьютера вряд ли удастся «положить» работающий под управлением WordPress сайт, расположенный на мощном, отдельном сервере, однако если в распоряжении атакующего есть широкий канал или несколько ботов, атака сработает и против такого ресурса, причем окажется менее затратной для злоумышленника, нежели обычный DDoS.

Видеодемонстрацию атаки можно увидеть ниже.

Хотя DoS-уязвимости не подпадают под bug bounty программу WordPress, Тавайли все же сообщил о проблеме разработчикам через платформу HackerOne. К сожалению, создатели WordPress не сочли обнаруженную уязвимость достаточно серьезной и сообщили, что решать такие проблемы нужно на уровне сервера или сети, но не на уровне приложений. То есть патча для этого бага не существует.

В ответ на это Барак Тавайли опубликовал на GitHub собственный форк WordPress, в котором уязвимость устранена. Также исследователь выложил в открытый доступ bash-скрипт, который позволяет исправить проблему в уже существующих установках WordPress.