focus

ID Attribute

October 1, 2020
Abuse onblur, focus, iframes
Category Attack
Defenses Fetch Metadata, SameSite Cookies, Framing Protections, Document Policies

id属性はHTML要素を識別するために広く利用されています。残念ながらクロスオリジンのウェブサイトでfocusイベントとURLフラグメントを利用することによって、ページのどこにid属性が与えられているかを決定することができます。例えば、https://example.com/foo#barが読み込まれると、ブラウザはid="bar"が与えられた要素までスクロールしようとします。これはクロスオリジンのサイトで定義したiframeでhttps://example.com/foo#barを読み込むことによって検出することができます。もし、 id="bar" を持つ要素がある場合は、 focus イベントが発生します。 focus イベントもまた同じ目的で使用することができます1。 いくつかのウェブアプリケーションはfocusable要素にid属性を設定しており、ユーザ情報の開示につながります。これらのid属性には、ユーザに直接関連する機密情報やユーザの状態(アカウントの状態)に関連する情報を含めることができます。 コード # 以下のコードは別のサイトからID属性を検出する例を示しています: // onblurイベントをリッスン onblur = () => { alert('Focus was lost, so there is a focusable element with the specified ID'); } var ifr = document.createElement('iframe'); // ページに id="x" のフォーカス可能な要素がある場合、フォーカスを得ることができます。 // 例: <input id="x" value="test" /> ifr.src = 'https://example.org/#x'; document.body.appendChild(ifr); info 上記の手法はFireFoxではうまく動作しない可能性があります。 攻撃シナリオ # id属性を利用した攻撃は以下のような物があります。 とある銀行がモバイルデバイスのセッションを認証するために短い数字のワンタイムPin(OTP)を生成することを許可しています。この銀行のページはクライアントにPINコードを表示するためのbutton要素のidにOTPコードそのものを使用していました。この挙動を悪用し、すべてのオプションをブルートフォースすることでOTPコードを窃取し、ユーザアカウントを侵害することができます。 とあるウェブアプリケーションが、プレミアムアカウントのステータスを持つユーザや、特定の性別のユーザである場合、あらかじめ定義されたidとHTML要素の組み合わせを利用します。攻撃者は、被害者のページに特定のidがあるかを検出し、被害者のアカウント情報を漏えいさせることができます。 対策 # Document Policies SameSite Cookies (Lax) COOP Framing Protections Isolation Policies ✔️ ✔️ ✔️ ❌ FIP 参考文献 # Leaking IDs using focus, link ↩︎

Scroll to Text Fragment

October 1, 2020
Abuse onblur, focus, iframes
Category Experiments
Defenses Document Policies

Scroll to Text Fragment (STTF) は、ユーザーがウェブページのテキストの任意の部分へのリンクを作成できるWebプラットフォームの新機能です。フラグメント#:~:text=は、ブラウザによって強調表示されてビューポートに取り込まれるテキストスニペットを運びます。この機能は、攻撃者がこの動作の発生を検出できることで、新しいXS-Leakをもたらします。この問題は、Scroll to CSS SelectorのXS-Leakに非常によく似ています。 期待される課題・議論される課題 # この機能の仕様に関する初期の議論では、単純な実装でいくつかのXS-Leakをもたらせることが示されました1。この仕様では、様々な攻撃シナリオ2が考慮されており、Googleの研究結果も同様です3。この機能を実装する際、ブラウザが注意すべきXS-Leakの可能性の1つは、以下の通りです。 攻撃者は、ページをiframeとして埋め込むことで、親ドキュメントのonblurイベントを聞くことによって、ページがテキストにスクロールされたかどうかを検出することができます。この方法は、ID Attribute XS-Leakと類似しています。このシナリオは、Chromeの実装4では、トップレベルのナビゲーションで発生するフラグメントナビゲーションのみを許可しているため、緩和されています。 現在の課題 # warning これらのXS-Leaksは、ターゲットページに何らかのマークアップを注入する必要があります。 STTFの開発過程で、フラグメントナビゲーションを検出するための新しい攻撃やトリックが発見されました。そのうちのいくつかは今でも有効です。 攻撃者が制御するiframeを埋め込んだWebページでは、テキストへのスクロールが発生したかどうかを攻撃者が判断することができるかもしれません。これは、IntersectionObserverAPIを使用して行うことができます5 2 3。 ページがレイジーローディングで画像を含む場合、攻撃者は画像が[ブラウザにキャッシュ]cached in the browserされているかどうかをチェックすることで、画像を含むフラグメントナビゲーションが発生したかどうかを検出することができます。これは、レイジーローディングの画像は、ビューポートに表示されたときにのみ取得(およびキャッシュ)されるため、機能します。 important Scroll to Text Fragmentは、Chromeでのみ利用可能です。仕様書ドラフトは現在検討中です。 info Scroll to Text Fragment XS-Leaksでは、ページ上に1つの単語が存在するかどうかを観察し、ユーザーがページに対して何らかの操作(例:マウスクリック)を行った場合にのみ、攻撃者は一度に1ビットの情報を抽出することが可能です。 なぜ問題なのか? # 攻撃者はSTTFを悪用して、Webページに表示されるユーザーの個人情報を漏えいさせることができます。 事例シナリオ # あるユーザが国民健康保険制度のWebサイトにログインしており、そこでユーザの過去の病気や健康問題についての情報にアクセスすることが可能でした。攻撃者はユーザーをそのページの一つに誘い込み、STTFを使用してユーザーの健康状態の詳細を推測できる可能性があります。例えば、ある病名で検索した際に、ページスクロールを検知すると、その病名が被害者の病気であることを知ることができます。 対策 # Document Policies SameSite Cookies (Lax) COOP Framing Protections Isolation Policies ✔️ ✔️ ❌ ✔️ RIP 🔗 NIP 参考文献 # Privacy concerns with proposal through inducing network requests, link ↩︎ ...