- SVGフィルターを用いた新しいクリックジャッキング手法が提示され、従来の単純なクリック誘導型攻撃を、より複雑なインタラクティブな攻撃へ拡張
feColorMatrix、feDisplacementMapなどのSVGフィルター要素がcross-origin iframeにも適用可能であることが確認され、これにより視覚的な改ざんとデータ抽出が可能となる
- フィルターの組み合わせによりピクセル読み取り、論理演算、条件付きUI操作が可能になり、多段クリックジャッキングや入力誘導型攻撃を実装できるようになった
- 実際の例としてGoogle Docsの脆弱性を利用した攻撃が成功し、研究者はGoogle VRPから**$3133.70の報酬**を受け取った
- この手法はブラウザセキュリティモデルの新たな攻撃面を示しており、SVGフィルターの論理的な活用がセキュリティ脅威へ発展しうることを明らかにしている
SVGクリックジャッキングの概要
- 従来のクリックジャッキングは、iframeを重ねることでユーザーに意図しないクリックをさせる単純な攻撃構造
- 新たに提示されたSVGクリックジャッキングは、SVGフィルターを使って複雑なインタラクションとデータ流出を可能にする
feColorMatrixやfeDisplacementMapなどのフィルターはクロスオリジン文書にも適用され、外部コンテンツを視覚的に操作できる
SVGフィルターの構成要素
- 主要なフィルター要素として**
<feImage>、<feFlood>、<feOffset>、<feDisplacementMap>、<feGaussianBlur>、<feTile>、<feMorphology>、<feBlend>、<feComposite>、<feColorMatrix>**などがある
- これらは入力画像を組み合わせ・変形して新しい画像を生成し、チェーンとして接続可能
- このような組み合わせにより、攻撃者は視覚エフェクト、マスキング、色の操作などを自由に実装可能
攻撃例
- フェイクキャプチャ(fake captcha):
feDisplacementMapを使用してテキストを歪ませ、ユーザーに機密コードの入力を促す
- グレーテキスト隠し(grey text hiding):
feCompositeとfeMorphologyで入力欄の案内文やエラーメッセージを削除し、ユーザーに攻撃者が指定したパスワードを入力させる
- ピクセル読み取り(pixel reading):特定のピクセルの色を検知してフィルター動作を制御し、ボタンのクリック・ホバー・入力状態検知などの動的レスポンス型攻撃を実装
論理演算と複合攻撃
feBlendとfeCompositeを組み合わせることで、AND、OR、XOR、NOTなどの論理ゲートの実装が可能
- これによりSVGフィルター内で完全な論理回路を構築でき、複数段階のクリックジャッキングシナリオを自動化可能
- 例として**『Securify』アプリ攻撃**では、ダイアログの表示、チェックボックスのクリック、ボタンのクリックなど複数のステップを論理的に制御してユーザーをだます構造を実装
実際の事例:Google Docs脆弱性
- Google Docsで「Generate Document」ボタンをクリックした後に表示されるポップアップと入力欄をSVGフィルターベースのロジックで検知・操作
- 入力欄のフォーカス状態、グレー文字、ローディング画面をリアルタイムで検知して攻撃フローを制御
- この攻撃はGoogleに報告され、$3133.70のバグバウンティが支払われた
QRコードの応用
- SVGフィルター内でQRコード生成ロジックを実装し、ピクセルデータをURLとして符号化してQR形式で表示可能
- ユーザーがQRをスキャンすると、攻撃者が管理するサーバーへデータが送信される
feDisplacementMapとReed–Solomon誤り訂正を用いて、スキャン可能なQRコードを生成
追加の活用可能性
- テキスト読み取り、クリックベースのデータ流出、偽のマウスカーソル挿入など、さまざまな攻撃の応用が可能
- JavaScriptを使わずCSS/SVGだけで攻撃実装が可能なため、CSP回避の可能性がある
研究的意義
- SVGフィルターを用いた論理演算ベースのクリックジャッキングは、既存の研究では扱われていない新しい攻撃手法
- 過去の研究はSVGを単なる視覚的な隠蔽用途としてのみ言及していたが、本研究は論理実行とインタラクション制御を実証
- 研究者はこれを新しい脆弱性クラスとして提示し、ブラウザセキュリティモデルの見直しの必要性を強調
マまとめ
- 本研究は、SVGフィルターをプログラミング言語のように活用した初のセキュリティ攻撃事例として評価される
- 著者は2025年末に39c3とDisobey 2026で関連発表を予定
- この投稿は画像・JSなしで42kBのHTML/CSS/SVGのみで作成されており、実験的セキュリティ研究の創造性を示している
1件のコメント
Hacker News の意見
開発者が X-Frame-Options ヘッダーを適切に設定すれば、この問題は解決する
ただ、現実にはセキュリティ問題を追いかけるうちに、ブラウザ側が SVG 仕様の半分を削除するような対応をしそうだ
また、フレームではなく HTML インジェクションが可能なサイトでもこの攻撃は成立する
私はすでにセキュリティ上の理由で SVG を無効にしている
ただ、最近は CSS まで無効化しなければならないのではと思えてくる
CSS が単にテキストを飾るためのもののままでいてくれたらよかったのに、今ではプログラミング言語のようになって、ハッカーや広告主に悪用されやすくなっている
今ではほとんど不可能に近い
「ピクセルが純粋な黒かどうかを検知してフィルターをオン・オフする例」を見て完全に混乱した
なぜ HTML/CSS がここまで複雑になったのかわからない
隠された
<checkbox>と<label>があり、クリックするとチェックボックスがトグルされ、CSS だけで状態に応じてスタイルが変わるSVG は実際には何も描画せず、フィルターだけを定義している
<feTile>が 2 つも使われていて、タイル領域と出力領域を別々に定義する構造も奇妙だ<fake-frame>や<art-frame>のような要素はいったい何なのか?<label>のクリックでチェックボックスがトグルされるのは HTML の基本動作だCSS の
:has()セレクターを使って状態を検知している<feTile>は単一のフィルター要素で、入力画像をタイル化したりクロップしたりするために使う<fake-frame>と<art-frame>は自分で定義した カスタム要素だ関連内容はブログ記事にまとめた
<label>クリックでフォーカスが移るのはデスクトップ UI の伝統に従ったものだチェックボックスの状態に応じてスタイルを変える機能も Firefox 1 の時代からあった
SVG フィルターを HTML に直接埋め込むのも古くからある機能だ
つまり、これは新しい HTML の問題というより 古い機能の組み合わせだ
このデモを見て、昔の Flash Player ハックを思い出した
ユーザーをだましてシステムストレージを許可させる、あの手法に似ている
ベクターグラフィックスは本当に自制心のない存在のようだ
SVG adder は芸術作品のようだ。本当にすごい
関連する内容は Stack Overflow の投稿 を参考にした
私の Android Chrome(正確には Kiwi Browser)では、ダークモードのせいか画面が崩れたり妙に表示されたりする
同じ現象が出ている人はいるだろうか
この記事を読んで、以前見た CSS 計算デモ を思い出した
本当に印象的な仕事だ。どう解決すべきかはわからないが、早急な修正が必要だ
とても素晴らしい投稿だった。読んでいるあいだずっと楽しかった