番外編第2回 赤坂さん、Flashを攻める!


杉山 俊春
三井物産セキュアディレクション株式会社
テクニカルサービス事業部
コンサルタント
2007/3/9
(Illustrated by はるぷ)

 ActionScriptでHTTPヘッダを操作

 FlashからHTTPヘッダが操作されたリクエストを送信する際には、Flashが配置されているサーバに対してのみでなく、任意のサーバに対して送信することが可能となる(送信を行うだけであれば、番外編第1回で解説したポリシーファイルの制約を受けない形で行うことが可能である)。図1にその仕組みを示す。

図1 

 ここでは、Flashコンテンツが設置されているサーバを「www.example1.co.jp」とし、HTTPヘッダが操作されたリクエストを受け取るサーバを「www.example2.co.jp」としている。この際に、ユーザーのブラウザから実際にHTTPヘッダが操作されたリクエストが送信される流れとしては以下のようになる。

  1. ユーザーは「www.example1.co.jp」上に設置されているFlashコンテンツをブラウザで閲覧する
  2. ブラウザに読み込まれたFlashコンテンツは新しいウィンドウ(ブラウザ)を開く
  3. 新しく開かれたウィンドウからHTTPヘッダが書き換えられたリクエストが「www.example2.co.jp」に送信される
  4. 新しく開かれたウィンドウ上にそのレスポンス内容が表示される

 第三者によるHTTPヘッダの改ざんを前提にしない場合、例えスクリプトが動作したとしても「攻撃者のブラウザ上でのみ動作する」ため、問題とされない事が多い。しかしFlashを用いた場合、「ユーザーのブラウザ上で動作させる」ことが可能となる。

 HTTPヘッダへのスクリプトの挿入に対する処理が正しく行われていない場合は、任意のスクリプトが動作してしまう可能性が存在し、Cookieに格納したセッションIDが奪われ個人情報の漏えいにつながる危険性がある。

req = new LoadVars();
req.addRequestHeader('Test', 'addRequestHeader_test');
req.send('http://www.example2.co.jp/', '_blank', 'POST');
リスト1 Testヘッダを挿入するActionScriptの例
    (「www.example1.co.jp」上に設置)

Accept: */*
Accept-Language: ja
Referer: http://www.example1.co.jp/test.swf
Content-Type: application/x-www-form-urlencoded
Test: addRequestHeader_test
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.example2.co.jp
Connection: close
リスト2 Testヘッダが挿入されたリクエスト例
    (「www.example2.co.jp」へのリクエスト)

星野君 「こんなのあったんですか、初めて知りました……。Flashを攻撃に使おうなんて考えもしなかったですよ。こんなことできちゃうと、HTTPリクエストヘッダが第三者に操作されてしまうって想定していないアプリケーションは大変なんじゃ……」

【注】
HTTPリクエストヘッダが第三者に改ざんされてしまうという問題について、Flashの脆弱性であるとする意見もある。しかし、ApacheのExpectヘッダの脆弱性のように、HTTPリクエストヘッダ操作で発生する問題についても、脆弱性として報告されているケースがある。
本稿では、第三者によるHTTPヘッダの改ざんの是非については触れないが、対応の要否については危険度や影響度によって判断することをお勧めする

赤坂さん 「私いままでこれ知らなくてさ、昨日初めて知ったんだよね。……って、あれ? 私のPCだとなんかちょっと挙動が違う。なんか動かないよ」
星野君 「あれ、ホントだ。赤坂さんのPCだと動かないですね。何でだろ……」
赤坂さん 「家のPCでは動いたんだけどなー」
星野君 「う〜ん。あ、分かりましたよ。僕のFlashPlayerのバージョンちょっと古いみたいですね。バージョンによってできることが違うんですかね」

 この挙動の違いは、FlashPlayerのバージョンの違いによるものである。最新版のFlashPlayer(執筆時最新バージョンは9.0.28.0)では、Expectヘッダなどいくつかのヘッダに対しての操作の制限がされている。星野君の利用しているFlashPlayerのバージョンが古いため、Expectヘッダへの操作が有効になっていたのだ。

赤坂さん 「なるほど……。家のFlashPlayerだと、RefererとかUser-Agentとか普通に操作できたんだけど、新しいのではできないようになってるのか」
星野君 「バージョンによっては、もともとあるヘッダも操作できちゃったりするんですか。古いバージョンだとしても、それはなんか怖いですね……。FlashPlayerの更新とか結構忘れがちな気がするし」
赤坂さん 「そうだねぇ。ブラウザだけじゃなくて、FlashPlayerみたいなプラグインに関しても時々アップデートチェックをしないとダメだね」

 FlashPlayerの最新版は、AdobeのWebページ上で確認できる。

2/3

Index
赤坂さん、Flashを攻める!
  Page1
Flash、こんな事ができるの?!
Page2
ActionScriptでHTTPヘッダを操作
  Page3
赤坂さん、ダークサイドへ?


星野君のWebアプリほのぼの改造計画 連載インデックス


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間