新種のクリックジャッキング攻撃はCSSとSVGに依存

セキュリティ研究者のLyra Rebane氏は、Scalable Vector Graphics(SVG)とCascading Style Sheets(CSS)に依存した新種のクリックジャッキング攻撃を考案した。

Rebane氏は10月のBSides Tallinnでこの手法を実演し、現在は自身のアプローチの概要を公開している。この攻撃は、まだ完全には緩和されていないが、SVGフィルターがオリジンをまたいで情報を漏えいさせてしまうという事実に依存しており、これはウェブの同一オリジンポリシーに反する。

クリックジャッキングとは、アプリケーションやウェブサイトのユーザーをだまして意図しない操作を行わせるさまざまな手口を指す。ユーザーインターフェース・リドレス攻撃とも呼ばれ、一般的にはインターフェース要素を操作して、ユーザー入力を悪意ある目的に転用できるようにする。

この用語は2008年、セキュリティ研究者のJeremiah Grossman氏とRobert Hansen氏によって、マウスクリックイベントを乗っ取り、攻撃者の望むように適用できる手法(たとえば被害者にウェブページの送信ボタンをクリックさせるなど)を説明するために作られた。

それ以来、ウェブの基本的なセキュリティモデルを強化するために、さまざまな緩和策が開発されてきた。これらは、異なるオリジン(多くの場合はウェブドメインの形を取る)が互いにどのようにやり取りできるかを制限するものだ。 

OWASPが詳述しているように、一般的な防御策には、X-Frame-OptionsやContent Security Policy(frame-ancestors)HTTPヘッダーを使ってブラウザがページをフレーム内に読み込むのを防ぐこと、ページがフレーム内に読み込まれたときにセッションクッキーが送信されないようにすること、JavaScriptを使ってページがフレーム内で読み込まれるのを防ぐことなどが含まれる。

それでもなお、昨年のクロスウィンドウ偽造のように、新たなバリエーションが次々と現れている。

Rebane氏は、AppleのLiquid Glass(液体ガラス)視覚歪みエフェクトをSVGとCSSで再現しようとしたことをきっかけに、この攻撃手法を発見した。再現に成功した後、彼女は、自身のSVG/CSSによる液体ガラス効果の再現をiframe内に配置すると、背後にあるメインウェブページのピクセルにアクセスできることに気づいた。

Rebane氏はThe Registerに対し、Paul Stone氏のPerfect Pixel Timing Attacks With HTML[PDF]やRon Masas氏のThe Human Side Channel攻撃を挙げ、過去にもクロスオリジン攻撃にSVGが使われてきたと語った。 

「私がやったような形でクロスオリジンデータ上でロジックを実行した人は、他にいないと思います」とRebane氏は述べている。

Rebane氏の投稿では、SVGフィルターを使って論理ゲートを作り、任意の計算関数でウェブページのピクセルを処理する方法が詳しく説明されている。これにより、他の手段ではあまりに複雑になりすぎるクリックジャッキング攻撃を実装できるという。

「feBlendとfeCompositeを使うことで、あらゆる論理ゲートを再現し、SVGフィルターを関数的に完全にすることができます」と彼女の投稿は説明する。「これは、タイミングに依存せず、リソースを使いすぎない限り、望むものは何でもプログラムできることを意味します。」

Rebane氏は、自身の手法の応用例として、Googleドキュメントのテキストを流出させる概念実証攻撃を作成してみせた。この攻撃では、ポップアップインターフェースウィンドウ上に「Generate Document(ドキュメントを生成)」ボタンが配置される。ボタンが押されると、背後のコードがポップアップを検出し、ユーザー入力用のCAPTCHAテキストボックスを表示する。CAPTCHAの送信ボタンは、提案されたドキュメントファイルを隠しテキストボックスに追加する。

Screenshot of Lyra Rebane's BSides presentation on SVG clickjacking

Lyra Rebane氏によるBSidesでのSVGクリックジャッキングに関するプレゼンテーションのスクリーンショット – クリックで拡大

通常であれば、X-Frame-Optionsヘッダーを設定することで、これはブロックされる可能性がある。しかし、Googleドキュメントはフレーミングを許可している。

Rebane氏によれば、これはサードパーティのウェブサイト上で利用可能である必要があるアプリケーションでは比較的一般的だという。「動画の埋め込み(YouTube、Vimeo)、ソーシャルメディアの埋め込み、地図アプリケーション、決済プロバイダー、コメント、広告などを考えてみてください」と彼女は説明する。「また、本来フレーム内で表示されることを意図していないにもかかわらず、それを防ぐために必要なヘッダーが欠けているアプリケーションも多数あります――たとえばAPIエンドポイントではよくあることです。」

さらにRebane氏によれば、この攻撃はHTMLインジェクションを用いることで、フレームではないターゲットに対しても実行可能だという。

「XSSと呼ばれる脆弱性クラスがあり、これはさまざまな手段でウェブサイトにHTMLを注入し、悪意あるJavaScriptを実行させるものです」とRebane氏は説明する。「攻撃者があなたのサイトにHTMLを注入できるということは、かつては即ゲームオーバーを意味しましたが、近年ではますます多くのサイトがCSPを使うようになっており、サイト所有者はページ上で安全でないJavaScriptが実行されないようにできるため、XSS攻撃を防げるようになっています。」

そのようなサイトを見つけた攻撃者は、JavaScriptを使わずにインジェクションを悪用する方法を考えなければならない、とRebane氏は言う。

「CSSは次善の手段であり、多くの興味深い攻撃に利用できます」とRebane氏は述べ、CSSはプログラミング言語と見なせると主張する。「SVGクリックジャッキングは、そこで使える多くの攻撃のうちの一つです。」

SVGクリックジャッキングは、ウェブセキュリティの状況を劇的に変えるものではないが、複雑な攻撃チェーンを構築する際のハードルを下げる。

Rebane氏によれば、この脆弱性を報告したことで、Googleから$3133.70のバグバウンティが支払われたという。「この攻撃はまだ修正されていませんが、現時点ではブラウザのバグなのかどうかも不明であり、参考までに言うと、他のブラウザ(例:Firefox)にも影響します」と彼女は述べている。

開発者がSVGクリックジャッキングから防御する方法はいくつか存在する。Rebane氏は自身のプレゼンテーションの中で、SVGフィルターがiframeを覆っているかどうかを検出する手段として、Intersection Observer v2 APIを挙げている。

Googleはコメント要請にすぐには応じなかった。 

Rebane氏によれば、Perfect Pixel Timing Attacksおよびその後継にまでさかのぼるという、3月に投稿された関連するChromiumのバグは、「修正しない(won’t fix)」とマークされている。®

翻訳元: https://go.theregister.com/feed/www.theregister.com/2025/12/05/css_svg_clickjacking/

ソース: go.theregister.com