24
見見見見 見見見見見見見 cybozu.com Security Challenge

見つけた脆弱性について(cybozu.com Security Challenge)

Embed Size (px)

Citation preview

Page 1: 見つけた脆弱性について(cybozu.com Security Challenge)

見つけた脆弱性について

cybozu.com Security Challenge

Page 2: 見つけた脆弱性について(cybozu.com Security Challenge)

My name isMasato Kinugawa ( 有力説 )日本人と思われるキヌガワ・マサト (ITmedia説 )クニガワマサト (GIGAZINE 説 )

Page 3: 見つけた脆弱性について(cybozu.com Security Challenge)

Google/Mozilla/Microsoft(IE11)/Facebook/Etsy/Paypal/Github etc..

Page 4: 見つけた脆弱性について(cybozu.com Security Challenge)

見つけた脆弱性XSS(DOM)XSS(Flash)XSS(Flash)XSS(Flash)XSS(Flash)XSS( ブラウザのバグ起因 )アクセス不備情報漏えい

Page 5: 見つけた脆弱性について(cybozu.com Security Challenge)

今回話すものXSS(DOM)XSS(Flash)XSS(Flash)XSS(Flash)XSS(Flash)XSS( ブラウザのバグ起因 )アクセス不備情報漏えい

Page 6: 見つけた脆弱性について(cybozu.com Security Challenge)

コンテスト開始数分前…ログインページの URL が伝えられる

見れるものは見ておこう:robots.txtcrossdomain.xmlエラーページHTTP レスポンスヘッダ静的ファイルが置かれているパス

Page 7: 見つけた脆弱性について(cybozu.com Security Challenge)

あれ…

// 大体こんなかんじのコードescaped_url = location.href.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt').replace('"', '&quot;');document.write('<a href="'+escaped_url+'">'+escaped_url+'</a>');

Page 8: 見つけた脆弱性について(cybozu.com Security Challenge)

location.href と XSSChrome/Safari/IE は # 以降に <> などを % エンコードせずに含められる• IE は ? 以降も OK

Page 9: 見つけた脆弱性について(cybozu.com Security Challenge)

コンテスト開始確認してもやっぱり動く開始して 15 分後に報告もう【 CySecChallenge-3 】、はや!

// 修正後escaped_url = locaton.href.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); document.write('<a href="'+escaped_url+'">'+escaped_url+'</a>');

Page 10: 見つけた脆弱性について(cybozu.com Security Challenge)

1 対 1 でメッセージを送受信する機能に存在特定 URL にアクセスするとログイン中の第三者 ( ゲストユーザーを除く ) がメッセージの添付ファイルにアクセス可能1 人に向けて送信しているのに別の人間が閲覧可能なのは適切でない

アクセス不備

��

��

😈

FILE

MESSAGE

Page 11: 見つけた脆弱性について(cybozu.com Security Challenge)

脱線

👴 U+1F474 🙋 U+1F64B 😈 U+1F608

OLDER MAN

HAPPY PERSON RAISING ONE HAND

SMILING FACE WITH HORNS

Page 12: 見つけた脆弱性について(cybozu.com Security Challenge)

Flash の XSS( 本日のメインコンテンツ )

個人的に Flash のバグを追っていた時期Flash は相当バグっている• 先日その一部が修正 (CVE-2014-0491)($2,000)

みつけた問題 (4 件 ) はすべて第三者が配布の swf ファイルすべて既知の脆弱性すべて ExternalInterface.call() の問題

Page 13: 見つけた脆弱性について(cybozu.com Security Challenge)

ExternalInterface.call()Flash から JavaScript を呼び出すために使うExternalInterface.call("JS 関数 "," 引数 ")Flash 側の引数の処理が適切でないため XSS を引き起こしやすい " \" \ ➡ ➡ \ (!?)

…ExternalInterface.call("console.log",loaderInfo.parameters["param"]);…

//http://example.com/example.swf?param="abc\// 実行時に Flash が生成する JavaScripttry{__flash__toXML(console.log("\"abc\"));}catch (e){"<undefined/>"}

Page 14: 見つけた脆弱性について(cybozu.com Security Challenge)

Ctrl+Shift+F

1つ目の問題

Page 15: 見つけた脆弱性について(cybozu.com Security Challenge)

2-4 つ目の問題静的ファイルをホストするドメインに XSS が存在アプリのドメインは app.cybozu-dev.com静的ファイルのドメインは static.cybozu-dev.com通常はフィッシング・ DoS 程度の影響で済む

Page 16: 見つけた脆弱性について(cybozu.com Security Challenge)

連鎖static.cybozu-dev.com にクロスドメインでファイルの中身を読み出せる Flash ツールが存在app.cybozu-dev.com は crossdomain.xml でstatic.cybozu-dev.com を許可XSS で ExternalInterface.addCallback() に設定された関数を細工して呼び出せば app.cybozu-dev.com の情報が盗れるような構造だった

Page 17: 見つけた脆弱性について(cybozu.com Security Challenge)

crossdomain.xml

…<cross-domain-policy> <allow-access-from domain="static.cybozu-dev.com" /></cross-domain-policy>…

Flash 独自のクロスドメイン制限を緩める設定ルートに設置することが多いkintone にも設置されていた:

https://app.cybozu-dev.com/crossdomain.xml

Page 18: 見つけた脆弱性について(cybozu.com Security Challenge)

ExternalInterface.addCallback()

JavaScript から Flash の関数を呼び出すために使う…ExternalInterface.addCallback("jsFunc",flashFunc)…

<embed name="swf" allowscriptaccess="always" src="http://example.com/example.swf"></embed><script>swf.jsFunc()//flashFunc() が呼び出される</script>

AS

JS

Page 19: 見つけた脆弱性について(cybozu.com Security Challenge)

攻撃イメージstatic.cybozu-dev.com app.cybozu-dev.com

xss のある swf

クロスドメインでレスポンスを取得できる swf

crossdomain.xml

<allow-access-from domain="static.cybozu-dev.com" />

ターゲットのページ

機密情報

Check

OK

Request

Response

XSS でロード & 関数呼出

機密情報

Page 20: 見つけた脆弱性について(cybozu.com Security Challenge)

具体的にExternalInterface.addCallback("jsFunc", send);// 省略public function send(uri:string):void{ var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(uri); loader.load(request);// 省略 ExternalInterface.call("util.xdr",responseText);

util={};util.xdr=function(a){alert(a)}// 上書き swf.jsFunc("http://app.cybozu-dev.com/target")// レスポンスが alert される

AS

JS

Page 21: 見つけた脆弱性について(cybozu.com Security Challenge)

ところで動的に JS で swf を作ればいいのでは?• data: URI や Blob で試したけどうまくいかない

これができたら「 crossdomain.xml で許可しているドメインに XSS = 設置ドメインの情報が漏れる」ことになるんだけど、誰かなんとかならない?

Page 22: 見つけた脆弱性について(cybozu.com Security Challenge)

Flash と XSS まとめセキュリティチェックの盲点Same Origin Policy とは異なるセキュリティ制限が今回のような問題を生むこともあるFlash は相当バグっている (2 度目 ) ので変なところに XSS が生まれることもある必要ないファイルは積極的に削除すべき

Page 23: 見つけた脆弱性について(cybozu.com Security Challenge)

コンテスト感想報告された途中経過はずっと 1位だったさらにコンテスト最終日に 5 件の問題を報告(全て脆弱性として受理 )余裕で 1位か…そうでもない

Page 24: 見つけた脆弱性について(cybozu.com Security Challenge)

最後にコンテスト形式は新鮮で面白かった第 2 回に期待!

ありがとうございました!