nginx
Security
Config
セキュリティ

nginxの設定ミスで起こるHostヘッダフォージェリ

はじめに

この記事は下記リンクの日本語翻訳記事です

https://github.com/yandex/gixy/blob/master/docs/en/plugins/hostspoofing.md

翻訳が誤っている場合はコメントか@no1zy_secまでお知らせいただけると幸いです。

[host_spoofing] Request's Host header forgery

多くの場合、Nginxの後方に位置するアプリケーションはURLを生成する(リダイレクト、リソース、電子メール内のリンクなど)ために適切なHostヘッダを必要とします。このヘッダのなりすましは、フィッシングからSSRFまでの様々な問題を引き起こす可能性があります。

注: アプリケーションはこの機能にX-Forwarded-Host リクエストヘッダを使用することもできます。この場合、ヘッダが適切に設定されていることを確認する必要があります。

どうやって見つけるか

ほとんどの場合、\$hostの代わりに\$http_host変数を使用した結果、脆弱になっています。

$host$http_host にはかなりの違いがあります。

  • $host - 次の優先順位でホストが決まります。

    1. リクエストライン
    2. Host リクエストヘッダフィールド
    3. リクエストに一致するサーバー名
  • $http_host - Host リクエストヘッダ

設定のサンプル

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

対策

幸いにも、全てが自明です。

  • server_nameディレクティブに正しいサーバー名を全てリストしてください。
  • 常に $http_host の代わりに $host を使用してください。
  • 認識できないホスト名を持つ全てのリクエストをキャッチするための専用の仮想ホストを作成してください。 Server blocks

追加情報

Host of Troubles Vulnerabilities
Practical HTTP Host header attacks

関連リンク

Hostヘッダフォージェリの対策について
nginxの設定ミスで起こるHTTP Splitting
nginxの設定ミスで起こるSSRF
nginxの設定ミスで起こるパス トラバーサル
nginxの設定ミスで起こるMultiline response headers
nginxの設定ミスで起こるレスポンスヘッダの出力不備
nginxの設定ミスで起こるreferer/origin検証の問題
nginxの設定ミスで起こるリファラの検証不備