HTTPヘッダーインジェクション

 HTTPヘッダーインジェクション攻撃は、Cookie出力やリダイレクト処理など、HTTPレスポンスヘッダーを出力している箇所に対する攻撃である。外部から、これらレスポンスヘッダーの値に改行文字を含ませることにより、本来のヘッダーとは別のヘッダーを送信したり、本文(HTTPメッセージボディー)を改変したりできる。これらを許すことはヘッダー出力処理のバグである。

 以下、簡単なCGIプログラムを題材として、HTTPヘッダーインジェクションによる「なりすまし投稿」の原理を説明する。

なりすまし投稿の仕組み

図1●HTTPヘッダーインジェクション攻撃に脆弱なCGIプログラム「setcookie.cgi」

 HTTPヘッダーインジェクション攻撃に脆弱なCGIプログラム「setcookie.cgi」を図1に示す。このCGIプログラムはクエリー文字列nameをそのままCookieとしてセットしている。呼び出し例は以下の通り。

http://example.jp/setcookie.cgi?name=tokumaru

 この場合のHTTPレスポンスは図2となり、「name=tokumaru」というCookieがセットされる。

図2●setcookie.cgiが出すHTTPレスポンスの例

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

図3●setcookie.cgiへの攻撃例

 後は、XSSの場合と同じ手順により、なりすまし投稿が可能になる。

攻撃への対策

 HTTPヘッダーインジェクションの対策は、Cookie出力、リダイレクトに専用のAPIやライブラリ関数を用いることに加えて、以下を行う。

  • Cookieの値はパーセントエンコードする(言語によっては自動的にエンコードされる)
  • レスポンスヘッダーを出力する際に、改行文字の有無をチェックして、もしあればエラーにする

この先は会員の登録が必要です。今なら有料会員(月額プラン)が12月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら