View
5.146
Download
1
Category
Preview:
Citation preview
見つけた脆弱性について
cybozu.com Security Challenge
My name isMasato Kinugawa ( 有力説 )日本人と思われるキヌガワ・マサト (ITmedia説 )クニガワマサト (GIGAZINE 説 )
Google/Mozilla/Microsoft(IE11)/Facebook/Etsy/Paypal/Github etc..
見つけた脆弱性XSS(DOM)XSS(Flash)XSS(Flash)XSS(Flash)XSS(Flash)XSS( ブラウザのバグ起因 )アクセス不備情報漏えい
今回話すものXSS(DOM)XSS(Flash)XSS(Flash)XSS(Flash)XSS(Flash)XSS( ブラウザのバグ起因 )アクセス不備情報漏えい
コンテスト開始数分前…ログインページの URL が伝えられる
見れるものは見ておこう:robots.txtcrossdomain.xmlエラーページHTTP レスポンスヘッダ静的ファイルが置かれているパス
あれ…
// 大体こんなかんじのコードescaped_url = location.href.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"');document.write('<a href="'+escaped_url+'">'+escaped_url+'</a>');
location.href と XSSChrome/Safari/IE は # 以降に <> などを % エンコードせずに含められる• IE は ? 以降も OK
コンテスト開始確認してもやっぱり動く開始して 15 分後に報告もう【 CySecChallenge-3 】、はや!
// 修正後escaped_url = locaton.href.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); document.write('<a href="'+escaped_url+'">'+escaped_url+'</a>');
1 対 1 でメッセージを送受信する機能に存在特定 URL にアクセスするとログイン中の第三者 ( ゲストユーザーを除く ) がメッセージの添付ファイルにアクセス可能1 人に向けて送信しているのに別の人間が閲覧可能なのは適切でない
アクセス不備
��
��
😈
FILE
MESSAGE
脱線
👴 U+1F474 🙋 U+1F64B 😈 U+1F608
OLDER MAN
HAPPY PERSON RAISING ONE HAND
SMILING FACE WITH HORNS
Flash の XSS( 本日のメインコンテンツ )
個人的に Flash のバグを追っていた時期Flash は相当バグっている• 先日その一部が修正 (CVE-2014-0491)($2,000)
みつけた問題 (4 件 ) はすべて第三者が配布の swf ファイルすべて既知の脆弱性すべて ExternalInterface.call() の問題
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/>"}
Ctrl+Shift+F
1つ目の問題
2-4 つ目の問題静的ファイルをホストするドメインに XSS が存在アプリのドメインは app.cybozu-dev.com静的ファイルのドメインは static.cybozu-dev.com通常はフィッシング・ DoS 程度の影響で済む
連鎖static.cybozu-dev.com にクロスドメインでファイルの中身を読み出せる Flash ツールが存在app.cybozu-dev.com は crossdomain.xml でstatic.cybozu-dev.com を許可XSS で ExternalInterface.addCallback() に設定された関数を細工して呼び出せば app.cybozu-dev.com の情報が盗れるような構造だった
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
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
攻撃イメージ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 でロード & 関数呼出
機密情報
具体的に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
ところで動的に JS で swf を作ればいいのでは?• data: URI や Blob で試したけどうまくいかない
これができたら「 crossdomain.xml で許可しているドメインに XSS = 設置ドメインの情報が漏れる」ことになるんだけど、誰かなんとかならない?
Flash と XSS まとめセキュリティチェックの盲点Same Origin Policy とは異なるセキュリティ制限が今回のような問題を生むこともあるFlash は相当バグっている (2 度目 ) ので変なところに XSS が生まれることもある必要ないファイルは積極的に削除すべき
コンテスト感想報告された途中経過はずっと 1位だったさらにコンテスト最終日に 5 件の問題を報告(全て脆弱性として受理 )余裕で 1位か…そうでもない
最後にコンテスト形式は新鮮で面白かった第 2 回に期待!
ありがとうございました!
Recommended