Skip to content

Instantly share code, notes, and snippets.

@mala
Last active November 11, 2016 10:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mala/8e822f2e292d8db68e288ac935025c71 to your computer and use it in GitHub Desktop.
Save mala/8e822f2e292d8db68e288ac935025c71 to your computer and use it in GitHub Desktop.

Flash and CORS

  • SOP bypass どこから脆弱性?

概要

  • SOP bypassと呼ばれる脆弱性
  • 報告した問題いくつか
  • 「脆弱性」だと認識されない問題について

Basic

  • cross originでの通信を許可するには?
  • JavaScript: CORS header
  • Flash: crossdomain.xml
  • Java,Silverlight: also supported crossdomain.xml

許可はどのタイミング?

  • CORSの場合
  • リクエスト発行のタイミングの場合
  • リソースの読み取りのタイミングの場合
  • 両方あります

  • カスタムヘッダ付与: リクエスト発行前にチェック、preflight requestが必要
  • 単純なリソース読み込み: リクエスト発行後にチェックされる。

crossdomain.xml

  • CORSはリソース単位であるのに対して
  • crossdomain.xmlはドメイン全体に対する包括的な許可

Flashによるcross originでのカスタムヘッダ付与


経緯


Flash側での修正、ブラウザでの修正

  • この問題は、FlashとBrowser両方の対応が必要だった。
  • pluginにredirect statusを伝えるための仕様の欠如

Flash and CORS

  • ブラウザ本体のsame origin policyとの食い違いが起きている
  • CORSで仕様が整理されてきて問題が明確になってきた
  • 何が出来て良いことで何が出来てまずいか

SOP bypass の level

  • UXSS: 強い、他のdomainの権限でscript実行
  • Read contents, cached contents: 読み込みが可能
  • POST only: 本来preflightが必要なrequestが実行可能
  • leak information: その他の本来取れない情報が取れる

multipart/form-data CSRF


外部画像のデータとしてのロード


問題

  • バグか脆弱性か?
  • 出来て良いことと悪いことの区別が難しい
  • 「脆弱性」として認識されないことも多い

事例

  • 自分が報告したもの
  • SafariのSOP bypass (URL偽装、cache読み取り)
  • FlashのSOP bypass(サイズ読み取り、リダイレクト判定)

CVE-2016-1786

  • Safari, WebKit based browser.
  • 30x redirect がキャッシュされた場合の処理がおかしい
  • URLが置き換わらない

最初は「仕様」「バグ」?

  • iOS developer曰く「Safariの仕様?」
  • 異なるサーバーにリクエストが飛んできている。
  • → それ仕様どころか確実にバグだし、脆弱性になるから!
  • 調査を開始 → 再現条件の特定、悪用方法を考える
  • 限定的だが外部originのキャッシュ読み取りに使える → URL偽装とSOP bypass

2015 / SOP bypass by ProgressEvent

  • reported by mala / not fixed yet.
  • Cross originでの読み込みが本当に制限しているか確認している途中で発見
  • 外部リソースロード時にProgress Eventが発生している
  • 出来てはいけない根拠 https://www.w3.org/TR/progress-events/#security-considerations
  • SOP bypass としては「弱い」

何がまずいのか? リダイレクトの検知

  • リダイレクトしているかどうかで、ログイン済みかどうかの判断が可能
  • https://github.com/RobinLinus/socialmedia-leak SocialMedia fingerprint
  • login後のredirect pathの制限 → 画像にリダイレクトしないように という対策が一部のサイトで行われる
  • それ無意味だから!!1

何がまずいのか?

  • サイズ推定による攻撃
  • httpsのサイトでファイルサイズが正確に取れる
  • ファイルサイズ自体がセンシティブになるようなケース?
  • 同じURLでもユーザーごとに違うレスポンスを返すようなケース
  • サイズに特徴があれば、ユーザーidの推定に使える

何がまずいのか?

  • 圧縮率の変化でコンテンツ推定は、SSL/TLSの脆弱性として知られる
  • gzip伸長後のサイズが返ってくるため、圧縮率を使った攻撃はあまり効果的ではない
  • MITMと組み合わせればヒントとしては大きい

リダイレクト先のURLは取れる?

  • crossdomain.xml で許可されていれば、取れる
  • auth.sns.example.com/my/picture → cdn.public.sns.example.com/userid/profile_image.jpg
  • こういうのがあればユーザー推定に使えそう。(見つけていない)
  • リダイレクト先のドメイン部分 → 許可が無くても、取れる。
  • auth.sns.example.com/my/picture → username.sns.example.com/ ?

Social media fingerprint対策

  • Flashのバグ残ってるとどうしようもない
  • 直ったとしてどこまで対策すべき?
  • 露骨にユーザー毎に異なる画像へリダイレクト、などはやめましょう
  • ユーザーIDの推定 > ログインしているかどうかの推定
  • それ以上は対処が困難、大手サイトも未対応

Cross originで結果が観測可能なリクエストとは???

  • あなたは正確に説明できますか?
  • 画像サイズ
  • ロード時間(onload,onerror発生まで)
  • window.name, window.parent.postMessage
  • etc

SOP bypass / high risk or not?

  • コード実行のゼロデイ攻撃などは優先対応
  • 「弱い」SOP bypassは修正に時間がかかる
  • 修正されないかもしれない
  • cross originのリソース読み込みでProgress
  • → 実際に使われている?代用がなく廃止が難しい

Web制作者はどうするべき?

  • Flashの死を待ちましょう
  • デフォルト無効化へ

Flash 使うケースではこんなのも

  • SOME (same origin method execution)
  • Flashのjs callback指定
  • 任意jsは実行できないが、window.opener.xxx 既にある関数の呼び出し
  • form submitでCSRFに利用 → 脆弱性に昇格

まとめ

  • cross originで出来てまずいことが出来たらSOP bypass
  • UXSSまで行かなくても、他の問題との組み合わせで脆弱性に
  • 本来出来てまずいことが、平然と出来ていたことがあった。
  • 今だとCORSで仕様が整理されて脆弱性だと明確に。

終わり

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment