Skip to content

Instantly share code, notes, and snippets.

@mala
Created December 9, 2016 02:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mala/7e1ff3bb042515f8f09435e1318ab14a to your computer and use it in GitHub Desktop.
Save mala/7e1ff3bb042515f8f09435e1318ab14a to your computer and use it in GitHub Desktop.
サンドボックスドメイン上に書き込まれたcookieを使ったWeb訪問履歴漏洩やfingerprintingについて

要約

  • サンドボックスドメイン上に記録されたcookieを使って、ユーザーの限定的な訪問履歴を取得したり、検索キーワードを取得することが可能です。
  • 検索エンジンや翻訳サービスなどで、他のサイトのコンテンツをproxyして表示する機能があると、単独では問題がないJavaScriptによるcookieを読み書きするコードが、同一のdomain上で実行されることになり影響が大きくなる場合があります。
  • 4年前に報告したものですが、今でも影響があり、多くのサービスは未対策または対策が不完全です。

対策

  • proxyする事業者むけ: JavaScriptからcookieが無効化されているブラウザのように振る舞うように document.cookie をHackする http://subtech.g.hatena.ne.jp/mala/20120709/13418196
  • 4年前だと古いブラウザでは使えない状況だったが、今では無視して良いだろう。
  • Feature Policy https://github.com/WICG/feature-policy はこの問題の対策に使えるかもしれません
  • 多数のユーザーでサンドボックスドメインを共有している場合 path=/ へのcookie設定を抑止することで緩和することができる https://github.com/mala/js-cookie-validator
  • 実際にリクエストを飛ばせばpathで制限されているcookieは読めるので、セキュリティ上の目的で使ってはならない。あくまで / にcookieが貯まる問題への緩和策として。
2012-07-10 送信
==============
脆弱性に関して
==============
■ 概要
bing検索のキャッシュ表示ドメイン上で閲覧履歴の漏洩が発生する問題があります。
ターゲットを罠ページに誘いこむことで、特定個人のWebサイト閲覧傾向が漏洩したり、あるいは、Webサイト閲覧傾向から個人の特定に使われる可能性があります。
■ 公開の有無
非公開、ただし、同等の問題についての報告を、自社サービス、及びGoogleに送っています。
■ 再現を確認した環境
JavaScriptとCookieを有効にしたブラウザでbingのキャッシュを表示することで、cc.bingj.com上にcookieが保存されるのを確認
■ 脆弱性に関する技術的な説明
■ 再現の詳細な手順
■ 脆弱性を悪用するシナリオ
1. cookieを読み取るコードを含むURLをbingにキャッシュさせる
2. ターゲットにキャッシュされたURLを訪問させる
3. cc.bingj.com に保存されているcookieの傾向から、ターゲットの閲覧サイトの傾向がわかる
cookieを読み取って外部に送信する機能を備えたwebページを作って、bingにキャッシュさせることで、cc.bingj.com
上に保存されたcookieは悪意のある第三者から読み取り可能になります。
特定の名前を持つcookieの有無を調べたり、cookieに保存されている値を読み取ることで訪問者の閲覧しているサイトの傾向を読み取ることが可能です。
通常、外部コンテンツをJavaScriptの実行込みで表示する場合は、認証情報の漏洩などが起きないように、別のドメインを用意されることが多くなっていますが、
多くのユーザーから広く参照されているサンドボックスドメインは、ユーザーの履歴情報の取得に悪用される可能性があります。
サービスの認証情報や、ユーザーの個人情報が漏洩することが無くとも、訪問者がどのようなサイトを訪問する傾向があるのか、ということが読み取り可能な状態になっていると言えます。
影響範囲:
アクセス解析用サービスの中には、サイトオーナー毎にユニークな名前を持つcookieを閲覧中のドメイン上に保存するものがあります。これらのcookieの名前から訪問サイトを識別することができます。
name,valueに特徴的な傾向を持つcookieをセットするサイトのbingでのキャッシュを閲覧したという履歴情報が、悪意のある第三者から取得可能な状態になっています。
また、cookieの値として訪問したURLやリファラを記録しているものがあれば検索キーワードも漏洩することになります。
これはJavaScript実行可能なドメインを多くのユーザーで共有している場合にも同様の問題がありますが、
検索エンジンのキャッシュの場合、そのドメインを複数ユーザーで共有していなくても「自分が管理しているドメイン内に特徴的なcookieを設定する」という単体では何の問題も無いコードが、
本来想定していないキャッシュの表示ドメイン上で実行されることで履歴漏洩のリスクが増加することになります。
これは複合的な問題ですが、少なくとも「単体では履歴の漏洩の問題が起きないサイト」が、キャッシュ用のドメイン上で表示されることによってユーザーのプライバシーリスクが増加しているという点については、検索エンジン側の問題であり、また修正することが可能です。
また、大量のCookieが保存されると、リクエストヘッダが肥大化するという問題もあります(一定以上に大きくなるとサーバー設定によって400エラーを返します)
■ 回避策
1. サーバー側で送らてきたcookieを削除するためのSet-Cookieヘッダを発行する
Googleのキャッシュページ(webcache.googleusercontent.com)では送られてきたcookieを削除するSet-Cookieヘッダを出力しています。
JavaScriptで設定されたCookieの消去が不完全であるというバグがあったため、Googleに報告してあります(近いうちに対策されると思います)
あるいはページ先頭にcookieを削除するためのJavaScriptコードを含めるのも良いでしょう。
2. キャッシュページにJavaScriptによるcookieの新規設定を抑制する処理を入れる
一部のcookieはpath指定された状態で保存されます。通常、このcookieは送信されることがないので無駄になります。
また、特定のpathに対して特徴的なcookieを保存する、ということが既知であれば、やはり訪問先サイトの検知に使われる可能性があります。
サーバーからのSet-Cookieヘッダでは、path指定されたcookieを消去するのは困難です。
なのでWebページ側から、そもそもcookieの新規セットが出来ないようなコードを挿入することでこの問題を解決することができます。
(ただし古いブラウザでは動作しないため、影響を軽減するための対策になります)
参考: http://subtech.g.hatena.ne.jp/mala/20120709/1341819651
懸念事項
今後localStorageに特徴的な値を保存するサイト、といったものが増えてきた場合に、localStorageの内容を読み取ることで同様の履歴情報の漏洩が起こる可能性があります。
■ 参考情報その他
2012-09-13 送信
----
malaです。
返事が遅くなりました。
「サービスの認証情報や、ユーザーの個人情報については、直接 Cookie からは確認可能ではない」
という点はその通りです。特にbingの認証情報や登録情報が漏洩するわけではありません。
この問題の本質は、最初のメールに含めていますが
「特定個人のWebサイト閲覧傾向が漏洩したり、あるいは、Webサイト閲覧傾向から個人の特定に使われる可能性があります」という点です。
例えば、メールやチャット等で相手にメッセージを送ることが可能な場合
そのユーザーを罠ページに誘い出すことで、そのユーザーの検索語句や閲覧URLの傾向を読み取ることが出来ます。
bingキャッシュドメインから取得可能な情報に、個人を特定可能な情報が含まれていなくても
「既に個人情報を把握している」ユーザーの検索語句やWeb閲覧傾向を読み取ることは可能です。
あるいは bing検索のキャッシュドメイン上に存在しているcookieを読み取って保存しておくことでユーザーの趣味嗜好の判定に使ったり、
その段階では個人情報を把握していなくとも、後から特定個人と紐付けるといったことも考えられます。
こういった問題は、JavaScriptを使ったCookieの読み書きを含むWebサイトをキャッシュする、あるいは翻訳機能等でproxyして表示するサイト全般に存在しています。
多くのケースでは、取得可能な情報が限定的であり、大きなリスクにはならないと考えています。
しかし、シェアの大きい検索エンジン等、多くのユーザーに頻繁に使われるサービスであれば、
ユーザーにとって無視できないレベルのプライバシー漏洩の問題が発生しうるということになります。
具体的なリスクについては、個々のサービス、個々のユーザーの使用状況によって異なることになりますが、
ユーザー側での(定期的なCookie削除などの)自衛よりも、Webサービス側で改善することが望ましい問題であると考えています。
なぜかというと、ユーザーに手間をかけさせなくとも、サービス側でCookieを保存しないようにする、削除するようにする、といった比較的簡単な方法で対策が行えるからです。
サービスの認証情報や、ユーザーの個人情報が含まれていないので情報漏洩に当たらない、
というのはMicrosoftの公式な見解として、自信を持って発表できるような内容なのでしょうか。
今一度対応について再考いただければ幸いです。
よろしくおねがいします。
2012/8/27 Japan Microsoft Security Response <jpsecure@microsoft.com>:
> Mala様
>
> お世話になっております。
>
> 掲題の件についてご連絡を差し上げております。
>
> 本件に関しまして調査を進めております。現在までのところ今回の問題により Cookie が取得可能であり、以下の状況であると認識しております。
> ・ 訪問したサイト名、検索キーワードの情報が確認可能である
> ・ ただし、サービスの認証情報や、ユーザーの個人情報については、直接 Cookie からは確認可能ではない
>
> 上記の場合、弊社ではセキュリティ更新等で対応する情報漏えいには該当しないと判断しております。
> 上記認識に相違があり、そのほかの情報閲覧が可能な場合は、情報が確認できる Cookie のコピーをご提供いただけますと幸いです。
>
> お手数ですが、ご確認、ご検討のほどよろしくお願いいたします。
@noromanba
Copy link

tiny typo in 00.md; lacking 51

-http://subtech.g.hatena.ne.jp/mala/20120709/13418196
+http://subtech.g.hatena.ne.jp/mala/20120709/1341819651

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