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

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

ウェブアプリケーションはリクエストに対して出力するHTTPレスポンスヘッダのフィールド値を 外部から渡されるパラメータの値等を利用して、動的に生成するものがあります。

(例:パラメータから取得したURL情報をLocationヘッダに格納する場合や、入力された 名前などをSet-Cookieヘッダのフィールドに設定する場合があります)

攻撃者は、レスポンス内容に任意のヘッダーフィールドを追加したり、任意のボディを 作成したり、複数のレスポンスを作り出すような攻撃を仕掛ける場合があります。

発生する可能性のある脅威

  • 任意のCookie発行

  • キャッシュサーバーのキャッシュ汚染

  • 本物のサイト上に偽物のサイトが表示される

  • ブラウザに保存されているCookieを取得される

  • 任意のCookieをブラウザに保存される

実装例

アクセスしてきたユーザーを指定のURLにリダイレクトさせる処理です。 下記ではnumの値が数値であると仮定した作りになっています。

         $cgi = new CGI;
         $num = $cgi->param('num');
         print "Location: http://example.jp/index.cgi?num=$num\n\n";

numパラメータに「3%0D%0ASet-Cookie:SID=evil」を指定したURLへユーザーが アクセスした場合、Set-Cookieにevilが入力されたCookieが発行され、ユーザーには 偽物のページを表示します。

対策方法

  • ヘッダに埋め込む文字列に改行コードを許可しない。