HTTPヘッダインジェクション
HTTPヘッダインジェクションについて
HTTPヘッダインジェクションとは
HTTPヘッダインジェクションとは、HTTPを使って通信するシステムにおいて、動的にHTTPヘッダを生成する機能の不備を突いてヘッダ行を挿入することで不正な動作を行なわせる攻撃手法のことです。
SQLインジェクションなどと同様に、入力値を出力に用いている箇所において、文法上特殊な意味を持つ文字をエスケープせずに展開することで発生します。
HTTPヘッダインジェクションの仕組み
HTTPヘッダにおける特殊文字とは、改行コードです。
各HTTPヘッダ行は改行で終了し、それ以降は新たなヘッダ行として処理されます。
つまり、HTTPヘッダの値として改行コードを挿入することができれば、本来の通信内容には含まれないヘッダを挿入することができる。
HTTPヘッダインジェクションの実行例
WEBサーバ上のCGIが以下の通りである場合を考えます。
#!perl
use CGI;
my $cgi = new CGI;
my $url = $cgi->param('url');
print "Location: $url\n\n";
このCGIに対して以下のパラメータを指定します。
url=http://www.testhttp.co.jp/%0D%0ASet-Cookie:SID=12345
この結果、CGIで発行されるHTTPレスポンス・ヘッダーは以下のようになる。
Location: http://www.testhttp.co.jp/
Set-Cookie:SID=12345
「Set-Cookie:SID=12345」文から、意図しないCookieが発行されてしまいます。
HTTPヘッダインジェクションの対策
Webアプリケーション開発者は、HTTPヘッダを単なる文字列として直接出力することを避け、ヘッダ出力のために実行基盤が提供するAPIを使う。
入力値がコピーされる可能性が高いHTTPヘッダとしては、リダイレクト処理で使われるLocation、セッション管理でよく使われるSet-Cookie(およびSet-Cookie2)が挙げられる。
関連ページ
- セキュリティ
- DoS攻撃
- OSコマンドインジェクション
- SQLインジェクション
- HTTPヘッダインジェクション
- ディレクトリトラバーサル
- クリックジャッキング
- クロスサイトスクリプティング
- DNSサーバ関連攻撃
- コンピュータウィルス
- エクスプロイト
- バッファオーバーフロー攻撃