Как стать автором
Обновить

Host Header Injection или тёмная сторона интернета

Привет Хабр.

Под хайдом тебя ждёт необыкновенная история об изначально обыкновенном дне. История про подмену Host Header или про то, как я открыл тёмную сторону сайта Рускоязычного сообщества Yii.

На дворе шёл 15872 день от начала Unix Epoch. Обычный день. За окном облачно и необычайно хмуро. На столе уже стоит полная кружка крепкого горячего чёрного кофе. На лице лёгкая небритость. Собственно, в лучших традициях киберпанка.

Немного теории



Но сегодня, мы не об этом. Для начала я хочу уточнить, что я подразумеваю под Host Header Injection.
Существует некий специальный header под названием «Host», который отвечает за распознавание веб-сервером необходимого виртуального хоста.

Собственно процесс, примерно, следующий:
  • Ввод в адресную строку адреса сайта
  • Внутренняя браузерная магия(в большинстве случаев запрос к DNS серверу)
  • Запрос к серверу(по адресу предоставленному DNS`ом)
  • Ответ сервера и его обработка браузером


Сегодня речь и пойдёт об эксплуатации третьего пункта этого процесса.

Единственным способом узнать, какой хост запросил пользователь, для веб-сервера является, уже знакомый нам хидер «Host».
Но проблема хидеров в том, что они передаются со стороны пользователя, а это значит, что их значения можно с успехом изменить на любые другие.

В теории подобная «уязвимость», открывает нам различные возможности:
  1. В некоторых движках/фреймворках/скриптах включены различные отладочные инструменты по-умолчанию, если Host = localhost
  2. Доступ к localhost из внешней сети невозможен, если конечно веб-сервер не сконфигурирован нужным образом, но Host легко позволит нам получить доступ к недоступному localhost
  3. И многое другое


Эксплуатация



Дойдя до этого пункта, вы возможно зададитесь вопросом «На словах это всё просто отлично, но чем это может угрожать моему серверу/сайту(указать своё)?». В этом случае, для вас, у меня есть хороший пример на довольно популярном сайте Рускоязычного сообщества Yii.
Приступим.

Для начала мой инструментарий:
  1. Firefox
  2. Tamper Data

Но на самом деле, это неважно. С таким-же успехом, подобное можно провернуть, используя любой инструментарий, который позволяет изменять хидеры.

Первым делом, мы заходим на этот самый сайт. Убеждаемся в том, что всё отлично.

Далее, открываем Tamper Data, начинаем перехват трафика и обновляем страницу Yii, потверждая вмешивание в запрос.

Меняем наш хидер Host и подтверждаем запрос.

Вот и наш сюрприз, видимо на данном сервере в 2009-ом обитал другой сайт.


Защита



На данный момент, я не вижу стопроцентного способа обезопаситься от этой проблемы, кроме как менять исходные коды уязвимого обеспечения. Ведь хидеры, так-же, как и всё остальное являются пользовательским вводом и им точно так-же нельзя доверять.
Можно, так-же попробовать валидировать хидеры на стороне веб-сервера.

Большое спасибо, за прочтение моей статьи.
Надеюсь сегодня вы убедились в том, что доверять каким-либо данным поступающим от пользователя категорически нельзя.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.