エストニアのセキュリティ研究者 Lira Rebane 氏は、SVG グラフィックスとカスケーディングスタイルシートを組み合わせた、従来にないクリックジャッキング手法を明らかにした。10 月に開催された BSides Tallinn での彼女の講演は、広いコミュニティにはほとんど注目されなかったが、その後公開された 詳細な記事 によって、単なる視覚効果の実験をはるかに超える深刻な問題が明らかになった。Rebane 氏は、埋め込み iframe 内に表示されたウェブページの上に SVG フィルターを重ねることで、その下にあるページからデータを抽出できることを発見した。これは、埋め込みコンテンツへのクロスオリジンアクセスを禁じる、ブラウザセキュリティの基本原則の 1 つに反するものである。
クリックジャッキングは 10 年以上前から存在し、ユーザーに意図しない操作を行わせるためのさまざまなトリックを包含している。この操作は一見無害に見えることもある。たとえば、ユーザーはボタンをクリックするが、その下には第三者サイトの要素が隠れている、といった具合だ。この用語は 2008 年に研究者 Jeremiah Grossman 氏と Robert Hansen 氏によって名付けられ、クリックがどのように傍受され、攻撃者が選んだターゲットへとリダイレクトされうるかが研究された。それ以来、堅牢な緩和策が登場している。ブラウザは現在、iframe 内のページの挙動を制限し、そのようなコンテキストでのセッションクッキーの送信をブロックし、ドメインをまたぐインタラクションの透明性を高めている。
こうした防御にもかかわらず、新たな亜種は今なお現れ続けている。昨年話題になった、ウィンドウ間インタラクションを偽造する手法もその一例だ。Rebane 氏の発見は同じ領域に属するが、まったく異なるメカニズムに依存している。当初、彼女は SVG フィルターと CSS を用いて、Apple 特有の「Liquid Glass」視覚効果を再現しようとしていた。実験が成功した際、彼女は予期せぬ挙動に気づいた。埋め込み iframe 内に配置されたフィルターが、下にある親ドキュメントのピクセルにアクセスしているように見えたのだ。本来、セキュリティポリシー上は完全にアクセス不能であるはずのピクセルである。
Rebane 氏は、SVG が長らくクロスドメイン攻撃のベクターとして研究されてきたことを指摘し、Paul Stone 氏による Perfect Pixel Timing Attacks や Ron Masas 氏による Human Side Channels の研究を挙げている。それでもなお、SVG フィルターから得られたデータをこのような形で悪用した例はなかったと主張する。「私がやったような形でクロスドメインデータに対して計算処理を行った人は、他にいないと思います」と、彼女は The Register に語っている。
鍵となる洞察は、SVG フィルターを組み合わせることで、論理コンポーネントのように振る舞わせられるという点だ。feBlend と feComposite を用いて、Rebane 氏はページのピクセルを任意の関数で処理できるチェーンを構築した。これにより、フィルターの集合を、JavaScript を一切必要としない初歩的な計算ユニットへと変貌させたのである。このアプローチにより、他の手段では極めて複雑になるか、そもそも不可能な攻撃が可能になる。
実際の適用可能性を示すため、Rebane 氏は Google ドキュメントを標的にした。彼女の概念実証では、「ドキュメントを生成」ボタンを備えたポップアップウィンドウが用いられた。クリック後、ユーザーには CAPTCHA 入力用のテキストエリアが表示される一方で、背後のコードは、モデルが後にドキュメントへ挿入する予定の事前定義されたスニペットで、隠しフィールドの内容をひそかに置き換えていた。このような挙動は通常、X-Frame-Options ヘッダーや frame-ancestors ポリシーによってブロックされるが、Docs は外部サイトへの埋め込みを許可しており、この手法に対して脆弱になっている。
Rebane 氏は、フレーミングを許可しているサービスは他にも多数存在すると指摘する。動画プラットフォーム、地図ツール、コメントシステム、広告ネットワーク、決済ウィジェットなどだ。さらに、本来フレーム内での実行を想定していない多くのインターフェースが、必要な制限付きヘッダーを設定していない。これは API エンドポイントでよく見られる見落としである。
この手法は、埋め込みフレームを伴うシナリオに限られない。HTML インジェクションが可能な場合、同じフィルターチェーンをターゲットページそのものの上に直接構築できる。Rebane 氏は、XSS クラスが歴史的に、攻撃者に侵害サイト上で JavaScript を実行させることを許してきたと振り返る。より多くのサイト運営者が、安全でないスクリプト実行を禁じる厳格なポリシーを採用するにつれ、攻撃者は代替手段を模索せざるをえなくなり、CSS が便利なツールとなる。CSS はスクリプトを実行せずにページレイアウトやユーザーインタラクションを操作できるからだ。SVG クリックジャッキングは、このシフトから生まれた手法の 1 つにすぎない。
この新手法はウェブセキュリティの基本原則を覆すものではないが、複雑な攻撃チェーンの構築を劇的に容易にする。Google はこの問題を報告した Rebane 氏に 3,133.70 ドルのバグ報奨金を支払った。現時点で修正は存在せず、この挙動がブラウザの欠陥に起因するのか、それとも仕様そのものの癖によるものなのかは不明なままだ。Rebane 氏は、この問題が Chromium 系ブラウザだけでなく Firefox でも再現することを指摘している。
開発者は、この種の攻撃に対して防御策を講じることができる。Rebane 氏の推奨事項の 1 つが Intersection Observer v2 であり、SVG フィルターが iframe コンテンツをオーバーレイしている状況を検出するのに役立つ。一方で、ピクセル処理によるデータ漏えいに関連して 3 月に提出された Chromium のバグ報告は、今なおオープンのままで、「修正しない(won’t fix)」とマークされている。実証されたこの手法を踏まえると不穏なシグナルであり、今後の研究の種となる可能性が高い。
翻訳元: https://meterpreter.org/zero-js-clickjacking-svg-filters-exploit-iframes-to-steal-cross-origin-data/