Перейти к содержанию

Подделка заголовка запроса Host

Gixy Check ID: host_spoofing

Зачастую, приложению, стоящему за Nginx, необходимо передать корректный заголовок Host для корректной генерации различных URL-адресов (редиректы, ресурсы, ссылки в письмах и т.д.). Возможность его подмены злоумышленником может повлечь множество проблем от фишинговых атак до SSRF, поэтому следует избегать таких ситуаций.

Возможно, ваше приложение так же ориентируется на заголовок запроса X-Forwarded-Host. В этом случае вам необходимо самостоятельно позаботится о его корректной установке при проксировании.

Как самостоятельно обнаружить?

Чаще всего эта проблема возникает в результате использования переменной $http_host вместо $host.

Несмотря на их схожесть, они сильно отличаются: * $host - хост в порядке приоритета: имя хоста из строки запроса, или имя хоста из заголовка Host заголовка запроса, или имя сервера, соответствующего запросу; * $http_host - заголовок запроса "Host".

Пример такой конфигурации:

location @app {
  proxy_set_header Host $http_host;
  # Other proxy params
  proxy_pass http://backend;
}

Что делать?

К счастью, все довольно очевидно: * перечислить корректные имена сервера в директиве server_name; * всегда использовать переменную $host, вместо $http_host.

Дополнительная информация