1. HTTPヘッダインジェクションとは
インジェクションは「注入」という意味ですから、HTTPのヘッダに悪意のコードを注入(インジェクション)するのですね。
そう考えてよい。
情報処理振興機構(IPA)の「安全なウェブサイトの作り方 改訂第7版」には、HTTPヘッダ・インジェクションについて次のように説明されている。
HTTPヘッダ・インジェクションについて |
---|
ウェブアプリケーションの中には,リクエストに対して出力する HTTP レスポンスヘッダのフィールド値を,外部から渡されるパラメータの値等を利用して動的に生成するものがあります。たとえば,HTTPリダイレクションの実装として,パラメータから取得したジャンプ先の URL 情報を,Location ヘッダのフィールド値に使用する場合や,掲示板等において入力された名前等を Set-Cookie ヘッダのフィールド値に使用する場合等が挙げられます。このようなウェブアプリケーションで,HTTP レスポンスヘッダの出力処理に問題がある場合,攻撃者は,レスポンス内容に任意のヘッダフィールドを追加したり,任意のボディを作成したり,複数のレスポンスを作り出すような攻撃を仕掛ける場合があります。このような問題を「HTTP ヘッダ・インジェクションの脆弱性」と呼び,この問題を悪用した攻撃手法は「HTTP ヘッダ・インジェクション攻撃」と呼びます。 (http://www.ipa.go.jp/security/vuln/websecurity.htmlより引用) |
ここにあるに「掲示板等において入力された名前等を Set-Cookie ヘッダのフィールド値に使用する場合」に関して、過去問(H27春SC午後Ⅰ問1)では具体的な例が掲載されている。
具体的に書くと、入力欄の文字列に以下を入れる (※途中で改行しています)
%0d%0a%0d%0a%3chtml%3e%3cbody%3e%3cscript%3ealert%28 %221%22%29%3c%2fscript%3e%3c%2fbody%3e%3c%2fhtml%3e
これをデコードすると以下になる
「改行コード」「改行コード」<html><body><script>alert("1")</script></body></html>
すると、Webサーバに対するHTTPリクエストは以下のようになる
HTTPリクエスト |
---|
GET /search?kensaku=jewelry「改行コード」 「改行コード」 <html><body><script>alert("1")</script></body></html> HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: ja-JP Accept-Encoding: gzip, deflate Host: [www.example.co.jp](http://www.example.co.jp/) Cookie: SESSIONID=134D96E470da240421svr5B019 |
これに対し、WebサーバからクライアントへのHTTPレスポンスは以下になる。
HTTPレスポンス |
---|
HTTP/1.1 200 OK Date: Tue, 10 Jun 2014 05:45:58 GMT Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache Set-Cookie:kensaku=jewelry <html><body><script>alert("1")</script></body></html> ←このようにスクリプトが実行できる |
すると改行コードにより、レスポンスヘッダではなくレスポンスボディとブラウザは認識する。ヘッダにはスクリプトが書かれても実行はされないが、レスポンスボディに配置されれば、ブラウザにてスクリプトが実行される。
こうやって、攻撃者は任意の攻撃コードをクライアント側で実行することができる。
2. HTTPヘッダインジェクションの攻撃事例
HTTPヘッダインジェクションを使って不正なURLを作ることができる。脆弱性があるサイトを利用するので、たとえばそのサイトが大手サイトであれば、ドメインは大手になる。利用者は、URLの後半を確認することはまずない。
そして、そのURLを掲示板であったり、メールで送信してクリックさせる。そうすれば、フィッシングサイトに誘導することや、攻撃者がSet Cookieも改ざんしてセッションIDを指定し、セッション固定攻撃にも悪用できる。
具体的なサンプルプログラムについては、以下に記載がある。
❶Capm Network
http://capm-network.com/?tag=HTTP%E3%83%98%E3%83%83%E3%83%80%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
❷徳丸氏の記事
https://xtech.nikkei.com/it/article/COLUMN/20070422/269134/
3. HTTPヘッダインジェクションの対策
対策に関しても、同じ情報処理安全確保支援士試験の過去問(H27春SC午後Ⅰ問1)で述べられている。
過去問(H27春SC午後Ⅰ問1) |
---|
U主任:仮に問題があるとした場合,Set-Cookieヘッダの値をセットするサーバ側の処理において,どのような対策が考えられますか。 T君:幾つかの対策があります。例えば,HTTPレスポンスヘッダを適切に出力するために,Webアプリの実行環境やプログラム言語が用意している,ヘッダ出力用の関数やAPIを使用する方法が考えられます。それが使用できない場合は,[ c ]するといった処理を開発者が自身で実装する方法も考えられます。 |
↓
↓
↓
↓
↓
空欄cは穴埋め問題であり、解答例は以下である。
・出力文字列に改行コードがあるとエラー画面を出力
・出力文字列の改行コード以降の文字列を削除