フィンガープリントやオンライン詐欺を特定するためのAPIを提供するFingerprintJSが、Apple純正ブラウザのSafariにはGoogleアカウント情報が任意のウェブサイトに漏えいする脆弱性が存在すると指摘しています。
問題の脆弱性は、Safariの最新バージョンであるSafari 15で新しく搭載されたブラウザにデータを保存するためのAPIである「IndexedDB API」に存在します。IndexedDB APIは、大量のデータを保持するように設計されたクライアント側ストレージ用のブラウザAPIで、Safariだけでなくすべての主要ブラウザでサポートされている非常に一般的なAPIです。IndexedDB APIは低レベルAPIであるため、多くの開発者にとって使いやすいものとなっています。
また、IndexedDB APIは同一生成元ポリシーを順守するよう設計されています。このポリシーは、あるオリジンが他のオリジンで収集されたデータとやり取りすることを制限するというもの。つまり、IndexedDB APIは基本的にデータを生成するウェブサイトのみがアクセスできるという設計になっているわけです。例えば、あるタブでメールアカウントを使用していて、別のタブで悪意のあるウェブページを開いても、同一生成元ポリシーがメールアカウントに関する情報が悪意のあるウェブページに盗まれることを防いでくれるわけです。
しかし、macOS・iOS・iPadOSなどあらゆるOS上で動作するSafari 15で、IndexedDB APIが同一生成元ポリシーを順守していないとFingerprintJSは指摘。ウェブサイトがデータベースとやり取りするたび、同じブラウザセッション内のすべてのアクティブフレーム・タブ・ウィンドウに同じ名前の新しい(空の)データベースが作成されてしまうとのこと。つまり、他のウェブサイトが別のウェブサイトで作成されたデータベースの中身を共有するわけではないものの、データベースの名前を閲覧できるようになってしまっているというわけ。この「データベースの名前」にはユーザーIDが含まれる可能性があり、FingerprintJSによると、YouTube・Googleカレンダー・Google KeepなどのGoogleアカウントを使用するあらゆるサービスは、すべてGoogleアカウントのユーザーIDをデータベースの名前としているそうです。
データベースの名前が漏えいすることの何が悪いのかという点について、FingerprintJSは「この脆弱性は明らかにユーザーのプライバシー侵害につながるものです。この脆弱性により、任意のウェブサイトがユーザーがアクセスするウェブサイトについて把握することが可能となります。さらに、場合によってはデータベースの名称がユーザーIDと同じものになっているため、ユーザーの特定にもつながります」「例えばGoogleのユーザーIDの場合、Google APIを使ってアカウント所有者の公開個人情報を取得することもできます。これらのAPIにより公開される情報は、多くの要因によって制御されますが、少なくともユーザーのプロフィール写真にはアクセスできるようになります」と指摘。
FingerprintJSによると記事作成時点でユーザーがこの脆弱性を回避するためにできることはなく、Safariのプライベートブラウジングモードを利用している場合でも、データベースの名前は筒抜け状態であるとのこと。
なお、FingerprintJSは2021年11月28日にAppleへ脆弱性を報告していますが、これを修正するためのSafariのアップデートはまだ公開されていません。また、海外メディアのThe Vergeがこの件についてAppleにコメントを求めていますが、記事作成時点では返答は得られていません。