はじめに
この記事は下記リンクの日本語翻訳記事です
翻訳が誤っている場合はコメントか@no1zy_secまでお知らせいただけると幸いです。
[host_spoofing] Request's Host header forgery
多くの場合、Nginxの後方に位置するアプリケーションはURLを生成する(リダイレクト、リソース、電子メール内のリンクなど)ために適切なHost
ヘッダを必要とします。このヘッダのなりすましは、フィッシングからSSRFまでの様々な問題を引き起こす可能性があります。
注: アプリケーションはこの機能にX-Forwarded-Host リクエストヘッダを使用することもできます。この場合、ヘッダが適切に設定されていることを確認する必要があります。
どうやって見つけるか
ほとんどの場合、$hostの代わりに$http_host変数を使用した結果、脆弱になっています。
$host
と $http_host
にはかなりの違いがあります。
-
$host
- 次の優先順位でホストが決まります。- リクエストライン
-
Host
リクエストヘッダフィールド - リクエストに一致するサーバー名
-
$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ヘッダフォージェリの対策について]
(https://qiita.com/no1zy_sec/items/718cb9a51da7c6d5a9a5)
nginxの設定ミスで起こるHTTP Splitting
nginxの設定ミスで起こるSSRF
nginxの設定ミスで起こるパス トラバーサル
nginxの設定ミスで起こるMultiline response headers
nginxの設定ミスで起こるレスポンスヘッダの出力不備
nginxの設定ミスで起こるreferer/origin検証の問題
nginxの設定ミスで起こるリファラの検証不備