Введение
В этой статье я объясню, что такое отравление при сбросе пароля, и покажу примеры на реальных проектах. Давайте начнемЧто такое отравление при сбросе пароля
Он существует, когда потенциально контролируемые пользователем данные используются для создания ссылки для сброса пароля. Это может быть в заголовке хоста или любых заголовках или даже в параметрах, если они контролируются пользователем и не фильтруются/проверяются, это может привести к отравлению при сбросе пароля. Обычно это приводит к захвату учетной записи, но вы можете украсть токены, отличные от токена сброса пароля.Отравление при сбросе пароля — это метод, с помощью которого злоумышленник манипулирует уязвимым веб-сайтом для создания ссылки для сброса пароля, указывающей на домен, находящийся под его контролем.
Я не вижу особого внимания к этой ошибке. Я могу найти только несколько отчетов (1 отчет) на https://huntr.dev об этой уязвимости. Поэтому я решил поискать его сам, посмотреть, как они существуют и как они выглядят за кодом. Теперь, когда мы знаем, что это такое, позвольте мне показать вам несколько примеров из реальной жизни.
CVE-2022–0935
Первый пример — в живом чате помощника . Живой чат-помощник — это система продажи билетов, созданная на php. В функции сброса пароля это тело сгенерированного электронного письма.
Он использует $hostв качестве узла ссылки для сброса пароля, и это объявление переменной $host.
Это один из наиболее распространенных случаев отравления ссылки для сброса пароля, также известный как внедрение заголовка хоста. Как видите, он использует $_SERVER[‘HTTP_HOST’]который, согласно документации php, является заголовком хоста
И этот заголовок может контролироваться пользователем. Что делает его уязвимым. Если мы запросим сброс пароля и изменим заголовок хоста, мы можем отравить ссылку сброса пароля, что позволит нам захватить учетную запись другого пользователя. Весь отчет читайте здесь. https://huntr.dev/bounties/a7e40fdf-a333-4a50-8a53-d11b16ce3ec2/ . Мейнтейнеры очень отзывчивы и, в отличие от других, исправили ошибку.
Тревога
Второй пример: Alerta — это система оповещения, созданная с помощью python и flask. Вот как они генерируют электронное письмо для сброса пароля
В отличие от предыдущего, он не находится в заголовке хоста, а скорее использует также потенциально контролируемый пользователем заголовок, заголовок Referrer. Функция ссылки просто объединяет все части URL-адреса вместе.
И это делает его уязвимым для отравления при сбросе пароля. Весь отчет можно прочитать здесь. Я сообщил об этой ошибке три месяца назад, и она до сих пор не исправлена, поэтому я решил раскрыть ее в этой статье.
MantisBt
MantisBt или Mantis Bug Tracker — это программное обеспечение для отслеживания ошибок, созданное с помощью php. Вот как они генерируют электронное письмо для сброса пароля.
Связанный сброс пароля создается с использованием этого string_get_confirm_hash_urlфункция. Давайте посмотрим, что он делает.
Он возвращает строку URL-адреса для сброса пароля. Хостовая часть URL-адреса получается с помощью config_get_global( ‘path’ ).
Эта функция получает глобальную переменную g_<variable name>. В нашем случае это глобальная переменная g_path. И я нашел эту глобальную переменную в config_defaults_inc.php
И переменная $t_host установлена в этой части кода
Здесь вы можете видеть, что он использует $_SERVER[‘HTTP_X_FORWARDED_HOST’]который X-Forwarded-Hostзаголовок, если он установлен. Этот заголовок обычно используется прокси-серверами и может контролироваться пользователем. Итак, чтобы проверить это, я сделал запрос на сброс пароля и добавил X-Forwarded-Hostзаголовок. Я также немного изменил его, чтобы он распечатывал электронное письмо в ответе.
Я также сообщил об этой ошибке три месяца назад, но не получил ответа. Глядя на их отчеты об ошибках, я обнаружил, что кто-то уже сообщал об этом еще в 2019 году, но его просто проигнорировали. https://mantisbt.org/bugs/view_all_bug_page.php
Окончание
Прежде чем я начал искать ошибки сброса пароля, я обычно тестировал только заголовок хоста в подходе «черный ящик», но это меня многому научило. Отравление при сбросе пароля может существовать и в других местах. Надеюсь, вы узнали что-то новое. Спасибо за чтение.Твиттер Автора Оригинала: https://twitter.com/tomorrowisnew_
Дискорд Автора Оригинала: https://discord.gg/bugbounty
Оригинальная статья: https://noob3xploiter.medium.com/behind-the-bug-password-reset-poisoning-f5a51d890260