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

7.428 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
7.428
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3.895
Ações
Compartilhamentos
0
Downloads
22
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

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

×