HTTPヘッダーインジェクション
HTTPヘッダーインジェクション攻撃は、Cookie出力やリダイレクト処理など、HTTPレスポンスヘッダーを出力している箇所に対する攻撃である。外部から、これらレスポンスヘッダーの値に改行文字を含ませることにより、本来のヘッダーとは別のヘッダーを送信したり、本文(HTTPメッセージボディー)を改変したりできる。これらを許すことはヘッダー出力処理のバグである。
以下、簡単なCGIプログラムを題材として、HTTPヘッダーインジェクションによる「なりすまし投稿」の原理を説明する。
なりすまし投稿の仕組み

HTTPヘッダーインジェクション攻撃に脆弱なCGIプログラム「setcookie.cgi」を図1に示す。このCGIプログラムはクエリー文字列nameをそのままCookieとしてセットしている。呼び出し例は以下の通り。
http://example.jp/setcookie.cgi?name=tokumaru
この場合のHTTPレスポンスは図2となり、「name=tokumaru」というCookieがセットされる。

その攻撃例を図3(1)に示す。name=tokumaruの後の「%0D%0A」は改行文字をパーセントエンコードしたものである。その場合のHTTPレスポンスは図3(2)のようになる。黒枠で示した部分が外部からURLのパラメーターで指定した部分だ。空の行が挿入されていて、<script>以下はHTTPのボディーと認識され、JavaScriptが挿入された。

後は、XSSの場合と同じ手順により、なりすまし投稿が可能になる。
攻撃への対策
HTTPヘッダーインジェクションの対策は、Cookie出力、リダイレクトに専用のAPIやライブラリ関数を用いることに加えて、以下を行う。
- Cookieの値はパーセントエンコードする(言語によっては自動的にエンコードされる)
- レスポンスヘッダーを出力する際に、改行文字の有無をチェックして、もしあればエラーにする