4.7 HTTPヘッダインジェクションの脆弱性
HTTPヘッダインジェクションの脆弱性
リダイレクトやクッキー発行などの処理で、外部からのパラメータを元に、レスポンスヘッダを出力する際に（任意のレスポンスヘッダの追加・レスポンスボディの偽造）、改行を挿入させられることで、発生する脆弱性
HTTPヘッダインジェクション脆弱性の影響①任意のクッキーの生成②任意のURL先へのリダイレクト③表示内容の改変④任意のJavaScript実行によるXSSと同様の被害⑤キャッシュ汚染※ HTTPレスポンス分割攻撃
HTTPリクエスト（第一リクエスト）の後ろに、偽コンテンツをキャッシュさせたいHTTPリクエスト（第二リクエスト）を付け加えて、攻撃する
偽コンテンツをキャッシュサーバが誤認してキャッシュします
HTTPヘッダインジェクション脆弱性の対策①外部からのパラメータをHTTPレスポンスヘッダとして出力しない・URLを直接指定せずに、連絡先を固定にするか、番号で指定するようにする
・Webアプリケーション開発ツールの提供するセッション変数を使って、URLを受け渡す②リダイレクトやクッキー出力を専用APIに任せる③ヘッダ生成するパラメータの改行文字をチェックする【ドメインチェック】【URL文字種】47-020a:CGIによるリダイレクト対策版（正常系）
47-030:PHPによるリダイレクト対策版（正常系）

HTTPヘッダと改行
URLの仕様で、クエリ文字列の改行はURLが渡される時点では「％０D%0A」にパーセントエンコードされているはずなので、URLに改行が入っていること自体、異常です。
クッキー値に、改行の他、カンマ、セミコロンを含める場合も、パーセントエンコードされるはずなので、改行が入っていれば、やはり異常です。
HTTPレスポンスヘッダへのクッキー出力機能
言語
PHP
Perl+CGI.pm
Java Servlet
ASP.NET

クッキー生成setcookie / setrowcookie ※CGI::Cookie※
HttpServletResponse#addCookie
Response.Cookies.Add

リダイレクトなし（headerを利用）
redirect
HttpServletResponse#sendRedirect
Response.Redirect

レスポンスヘッダ出力
headerheader
HttpServletResponse#setHeader
Response.AppendHeader※ ライブラリ側でクッキー値をパーセントエンコーディングします
ただし、PHPにはキャリッジリターンなどのバグがあり、最新盤では解決されているが、Redhat、CentOSの標準パッケージではPHPが古いので、注意が必要ですHTTPヘッダインジェクション 47-020:CGIによるリダイレクト（正常系）【ブラウザ】

【サーバ： 47/47-020.cgi 】【サーバ： 47/47-003.php 】

チェックが不完全【ブラウザ→サーバ： リクエスト 47/47-020.cgi → レスポンス 】 CGIによるリダイレクト（正常系）

【ブラウザ→サーバ： リクエスト 47/47-003.php → レスポンス 】 CGIによるリダイレクト（正常系）【ブラウザ】

HTTPヘッダインジェクション 47-020:CGIによるリダイレクト（罠サイトに遷移）【ブラウザ】【サーバ： 47/47-020.cgi 】【サーバ： 47/47-900.php 】

チェックが不完全【サーバ： 47/47-901.php 】

【ブラウザ→サーバ： リクエスト 47/47-020.cgi → レスポンス 】 CGIによるリダイレクト（罠サイトに遷移）「%0D%0A」（改行）を挿入したために、Location: http://examle.jp/
Location: http://trap.example.com/47/47-000.phpの２行のLocationヘッダが出力され、Apacheの処理で改行後のヘッダのみが有効になった【ブラウザ→偽サーバ： リクエスト trap.example.com/47/47-900.php → レスポンス 】 CGIによるリダイレクト（罠サイトに遷移）【ブラウザ→偽サーバ： リクエスト trap.example.com/47/47-901.php → レスポンス 】 CGIによるリダイレクト（罠サイトに遷移）【ブラウザ→サーバ： リクエスト 47/47-003.php → レスポンス 】 CGIによるリダイレクト（罠サイトに遷移）【ブラウザ】

HTTPヘッダインジェクション 47-020:CGIによるリダイレクト（クッキー設定;SESSID=ABCD123） クッキー表示【ブラウザ】①【サーバ： 47/47-020.cgi 】②【サーバ： 47/47-003.php 】

チェックが不完全【ブラウザ→サーバ： リクエスト 47/47-020.cgi → レスポンス 】 CGIによるリダイレクト（クッキー設定;SESSID=ABCD123） クッキー表示

【ブラウザ→サーバ： リクエスト 47/47-003.php → レスポンス 】 CGIによるリダイレクト（クッキー設定;SESSID=ABCD123） クッキー表示【ブラウザ】

HTTPヘッダインジェクション 47-021:CGIによるリダイレクト（偽画面表示）【ブラウザ】【サーバ： 47/47-020.cgi 】

チェックが不完全【ブラウザ→サーバ： リクエスト 47/47-020.cgi → レスポンス 】 CGIによるリダイレクト（偽画面表示）【ブラウザ】

HTTPヘッダインジェクション 47-021:CGIによるクッキーセット（正常系）【ブラウザ】【サーバ： 47/47-021.cgi 】

【ブラウザ→サーバ： リクエスト 47/47-021.cgi → レスポンス 】 CGIによるクッキーセット（正常系）【ブラウザ】

HTTPヘッダインジェクション 47-021:CGIによるクッキーセット（偽画面）【ブラウザ】【サーバ： 47/47-021.cgi 】

【ブラウザ→サーバ： リクエスト 47/47-021.cgi → レスポンス 】 CGIによるクッキーセット（偽画面）【ブラウザ】

HTTPヘッダインジェクション 47-020a:CGIによるリダイレクト対策版（正常系）【ブラウザ】【サーバ： 47/47-020a.cgi 】【サーバ： 47/47-003.php 】【ドメインチェック】 FQDNが「example.jp」で「/」（スラッシュ）以降の文字種をチェック【ブラウザ→サーバ： リクエスト 47/47-020a.cgi → レスポンス 】 CGIによるリダイレクト対策版（正常系）

【ブラウザ→サーバ： リクエスト 47/47-003.php → レスポンス 】 CGIによるリダイレクト対策版（正常系）【ブラウザ】

HTTPヘッダインジェクション 47-020a:CGIによるリダイレクト対策版（罠サイトに遷移）【ブラウザ】【サーバ： 47/47-020a.cgi 】【ドメインチェック】 FQDNが「example.jp」で「/」（スラッシュ）以降の文字種をチェック【サーバ： 47/47-900.php 】【サーバ： 47/47-901.php 】【ブラウザ→サーバ： リクエスト 47/47-020a.cgi → レスポンス 】 CGIによるリダイレクト対策版（罠サイトに遷移）【ブラウザ】【サーバ： 47/47-003.php 】

HTTPヘッダインジェクション 47-020a:CGIによるリダイレクト対策版（クッキー設定）【ブラウザ】【サーバ： 47/47-020a.cgi 】【サーバ： 47/47-003.php 】【ドメインチェック】 FQDNが「example.jp」で「/」（スラッシュ）以降の文字種をチェック【ブラウザ→サーバ： リクエスト 47/47-020a.cgi → レスポンス 】 CGIによるリダイレクト対策版（罠サイトに遷移）【ブラウザ】

HTTPヘッダインジェクション 47-021a:CGIによるクッキー対策版（正常系）【ブラウザ】【サーバ： 47/47-021a.cgi 】【サーバ： 47/47-003.php 】

【ブラウザ→サーバ： リクエスト 47/47-020a.cgi → レスポンス 】 CGIによるリダイレクト対策版（罠サイトに遷移）【ブラウザ】

HTTPヘッダインジェクション 47-021a:CGIによるクッキーセット対策版（偽画面）【ブラウザ】【サーバ： 47/47-021a.cgi 】

【ブラウザ→サーバ： リクエスト 47/47-020a.cgi → レスポンス 】 CGIによるリダイレクト対策版（罠サイトに遷移）【ブラウザ】

HTTPヘッダインジェクション 47-030:PHPによるリダイレクト対策版（正常系）【ブラウザ】【サーバ： 47/47-030.cgi 】【URL文字種チェック】【サーバ： 47/47-003.php 】

【ブラウザ→サーバ： リクエスト 47/47-030.php → レスポンス 】 PHPによるリダイレクト対策版（正常系）

【ブラウザ→サーバ： リクエスト 47/47-003.php → レスポンス 】 PHPによるリダイレクト対策版（正常系）【ブラウザ】

HTTPヘッダインジェクション 47-030:PHPによるリダイレクト対策版（罠サイトに遷移）【ブラウザ】【サーバ： 47/47-030.cgi 】【URL文字種チェック】【サーバ： 47/47-003.php 】

【ブラウザ→サーバ： リクエスト 47/47-030.php → レスポンス 】 PHPによるリダイレクト対策版（罠サイトに遷移）【ブラウザ】

HTTPヘッダインジェクション 47-030:PHPによるリダイレクト対策版（クッキー設定）【ブラウザ】【サーバ： 47/47-030.cgi 】【URL文字種チェック】【サーバ： 47/47-003.php 】

【ブラウザ→サーバ： リクエスト 47/47-030.php → レスポンス 】 PHPによるリダイレクト対策版（クッキー設定）【ブラウザ】