番外編最終回 Flash完成! でも最後の仕上げを忘れずに


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

 デバッグコードを残すのはFlashでも危険


赤坂さん 「お。変なコード見っけ」
星野君 「え? どれですか?」
赤坂さん 「ここ。これ」
星野君 「あ……。それ、デバッグ用に入れてたやつすね。そういえばそのままだったかも……」

var url = 'http://othercompany.example.co.jp/';
if(debugurl){url = debugurl;}

//(中略)

getURL(url + 'flash.html');
stop();
リスト3 星野君が残していた変なコード

星野君 「これ、リンク先を手元の環境にしてテストしてたんですよ。FlashにQueryString渡すとそのまま使えるのでー」

 星野君が書いたコードでは、

http://www.example.co.jp/flash_test.swf?debugurl=http://www.example.co.jp

のようにswfに対しQueryStringを渡すことによって、指定されたURLへアクセスを行うgetURL関数に渡す値を変化させることができる。

星野君 「まあ、でも、別に害ないからいいんじゃないですかね」
赤坂さん 「えー。害あるよー。ほら」

 赤坂さんはそういうと、この星野君が書いたデバッグコードを利用したクロスサイトスクリプティングを実際にやって見せた。

星野君 「ええ? あれ……。なんで?」

 getURL関数では、指定されたURLにアクセスを行うという機能だけでなく、JavaScriptを動作させるという機能も持つ。これは、FlashとJavaScriptの連携を行う際によく使われる。

getURL('javascript:alert("Javascript test!!")');
リスト4 getURL関数を利用したJavaScript呼び出しの例

 これを、星野君の作ったデバッグ用のコードに適用すると、以下のようなURLを指定することでJavaScriptが動作することになる【注1】

【注1】
swfに直接アクセスを行う方法では、FireFoxにおいては特に制限は存在しないが、Internet Explorerではdocumentオブジェクトなどにアクセスできないといった制限が存在する。
(動作確認はFireFox2.0.0.3、Internet Explorer 6.0 SP2にて実施)

swfに渡すQueryStringの例
http://www.example.co.jp/test.swf?debugurl=javascript:alert(%22xss%22);//

getURL関数に渡される引数
getURL('javascript:alert("xss");//' + 'flash.html');
リスト5 クロスサイトスクリプティングの実施例

 星野君が書いたように、デバッグ用として挿入している場合には、該当のコードを削除してしまえばよいが、削除できない場合も存在するだろう。

 getURL関数にQueryStringからの文字列を挿入する場合には、挿入する文字列が、“http:”か“https:”で始まることをチェックする(リスト6)、または、“http:”や“https:”を静的に記述する(リスト7)といった対策が挙げられる。

if (url.substr(0,5) == "http:" || url.substr(0,6) == "https:") { getURL(url); }
リスト6 “http:”か“https:”で始まることをチェックする

getURL('http://' + url);
リスト7 “http:”を静的に記述する

 このように、getURL関数にQueryStringを挿入するような例としてはFlash広告バナーによるトラッキングが挙げられる。このような仕組みを用いる際にはJavaScriptが動作してしまわないよう十分に注意する必要がある。

【参考】
Designer's Guide: Building Macromedia Flash Banners with Tracking Capabilities
http://www.adobe.com/resources/richmedia/tracking/designers_guide/

プライバシーとMacromedia Flash広告トラッキング
http://www.adobe.com/jp/devnet/security/security_zone/clicktag_security.html

2/3

Index
Flash完成! でも最後の仕上げを忘れずに
  Page1
星野君、Flash完成! 赤坂さんは早速……
Page2
デバッグコードを残すのはFlashでも危険
  Page3
いろいろできるFlashだからこそ


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


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間