見つけた
脆弱性について
cybozu.com Security Challenge
My name is
Masato 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.txt
crossdomain.xml
エラーページ
HTTPレスポンスヘッダ
静的ファイルが置かれているパス
あれ…
//大体こんなかんじのコード
escaped_url = location.href.replace('&', '&amp;').replace('<',
'&lt;').replace('>', '&gt').replace('"',...
location.hrefとXSS
Chrome/Safari/IEは#以降に<>などを%エンコード
せずに含められる
• IEは?以降もOK
コンテスト開始
確認してもやっぱり動く
開始して15分後に報告
もう【CySecChallenge-3】、はや!
//修正後
escaped_url = locaton.href.replace(/&/g, '&amp;').replace(/...
1対1でメッセージを送受信する機能に存在
特定URLにアクセスするとログイン中の第三者(ゲ
ストユーザーを除く)がメッセージの添付ファイルに
アクセス可能
1人に向けて送信しているのに別の人間が閲覧可
能なのは適切でない
アクセス不備
👴 🙋
...
脱線
👴 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()
FlashからJavaScriptを呼び出すために使う
ExternalInterface.call("JS関数","引数")
Flash側の引数の処理が適切でないためXSSを引
き起こしやすい...
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を許可
XS...
crossdomain.xml
…
<cross-domain-policy>
<allow-access-from domain="static.cybozu-dev.com" />
</cross-domain-policy>
…
Flas...
ExternalInterface.addCallback()
JavaScriptからFlashの関数を呼び出すために使う
…
ExternalInterface.addCallback("jsFunc",flashFunc)
…
<embe...
攻撃イメージ
static.cybozu-dev.com app.cybozu-dev.com
xssのあるswf
クロスドメインでレ
スポンスを取得で
きるswf
crossdomain.xml
<allow-access-from
doma...
具体的に
ExternalInterface.addCallback("jsFunc", send);
//省略
public function send(uri:string):void{
var loader:URLLoader = new...
ところで
動的にJSでswfを作ればいいのでは?
• data: URIやBlobで試したけどうまくいかない
これができたら「crossdomain.xmlで許可しているド
メインにXSS = 設置ドメインの情報が漏れる」ことに
なるんだけど、...
FlashとXSS まとめ
セキュリティチェックの盲点
Same Origin Policyとは異なるセキュリティ制限が
今回のような問題を生むこともある
Flashは相当バグっている(2度目)ので変なところに
XSSが生まれることもある
必要...
コンテスト感想
報告された途中経過はずっと1位だった
さらにコンテスト最終日に5件の問題を報告(全て
脆弱性として受理)
余裕で1位か…そうでもない
最後に
コンテスト形式は新鮮で面白かった
第2回に期待!
ありがとうございました!
Próxima SlideShare
Cargando en…5
×

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

7.439 visualizaciones

Publicado el

Publicado en: Tecnología
0 comentarios
5 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
7.439
En SlideShare
0
De insertados
0
Número de insertados
3.896
Acciones
Compartido
0
Descargas
22
Comentarios
0
Recomendaciones
5
Insertados 0
No insertados

No hay notas en la diapositiva.

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

×