Рассмотрим две уязвимости:
1 — Обход ограничения брута: в нестандартной конфигурации заголовок IP клиента принимает любую произвольную строку. При рандомизации ввода заголовка количество попыток входа в систему никогда не достигает максимально допустимого числа попыток.
2 — Отраженная XSS: при входе в систему как администратор WordPress параметр URL вкладки в /wp-admin/options-general.php?page=limit-login-attempts
Информация о плагине
Название плагина: Limit Login Attempts Reloaded
Затронутая версия:> = 2.13.0
Веб-страница плагина: https://wordpress.org/plugins/limit-login-attempts-reloaded/
Этот плагин WordPress предназначен для защиты от атак методом перебора и в настоящее время установлен более чем на 1 миллионе активных сайтов.
Однако во время быстрой проверки плагина было обнаружено две проблемы. Первая — обход ограничения брутфорса при нестандартной конфигурации, а другой — отраженная XSS.
Детали уязвимостей
1 — Неправильное ограничение чрезмерных попыток аутентификации — CWE-307
Пошаговые инструкции и PoC:
Необходимым предварительным условием является настраиваемый заголовок на странице настроек плагина в Trusted IP Origins, включая, например, X-Forwarded-For.
Страница конфигурации может выглядеть следующим образом:
Affected Endpoints
URL: http: //hostname/wp-login.php
Параметр HTTP: X-Forwarded-For
Действительно, брутфорс пароля блокируется:
Используем список слов в значении пароля:
После нескольких попыток плагин успешно нас останавливает:
Однако значение X-Forwarded-For не проверяется IP-адрес или массив IP-адресов.
Действительно, если добавить заголовок X-Forwarded-For в запрос на вход, он может проверить обход ограничения брутфорса.
Ниже приведены доказательства с подробностями об уязвимости и используемой полезной нагрузке.
Первый набор значений — это список слов, используемый для проверки значения пароля:
Второй список может быть любой строкой, даже с простым увеличением числа от 1 до 10:
Действительно, можем обойти ограничение и потенциально найти учетные данные для входа:
Полезная нагрузка, используемая для использования уязвимости, изменяя значение X-Forwarded-For при каждой попытке:
POST /wp-login.php HTTP/1.1
Host: wordpress
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
X-Forwarded-For: 1
Connection: close
Cookie: wordpress_test_cookie=WP+Cookie+check
Upgrade-Insecure-Requests: 1log=admin&pwd=password&wp-submit=Log+In&redirect_to=http%3A%2F%2Fwordpress%2Fwp-admin%2F&testcookie=1
2 — Неправильная нейтрализация ввода во время создания веб-страницы (Reflected Cross-Site Scripting) — CWE-79
Пошаговые инструкции и PoC
Можем заставить администратора предоставить опасный контент на уязвимую страницу, который затем отражается обратно пользователю и запускается веб-браузером. Наиболее распространенный механизм доставки вредоносного контента — это включение его в качестве параметра в URL, который публикуется публично или отправляется по электронной почте непосредственно жертвам.
Затронутые конечные точки:
• URL: http://wordpress/wp-admin/options-general.php?page=limit-login-attempts
• Параметр HTTP: tab
Ниже приведены доказательства с подробностями об уязвимости и используемых пейлоадов.
Данные считываются непосредственно из HTTP-запроса и отражаются обратно в HTTP-ответе:
Выполнение полезной нагрузки JavaScript в контексте браузера:
Пейлоад, используемый для выполнения уязвимости:
http://wordpress/wp-admin/options-general.php? page = лимит-попыток входа & tab = d7raf% 22% 3E% 3Cscript% 3Ealert (1)% 3C / script% 3E
Обратите внимание, что страница options-general.php доступна только администраторам WordPress. Пользователи с более низкими привилегиями не затронуты, потому что страница для них запрещена (ошибка 403).
Не забудьте подпиcаться на наш канал!