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

8 211 vues

Publié le

Publié dans : Technologie
0 commentaire
5 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
8 211
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3 976
Actions
Partages
0
Téléchargements
26
Commentaires
0
J’aime
5
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

見つけた脆弱性について(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回に期待! ありがとうございました!

×