2 ポイント 投稿者 GN⁺ 2025-12-07 | 1件のコメント | WhatsAppで共有
  • SVGフィルターを用いた新しいクリックジャッキング手法が提示され、従来の単純なクリック誘導型攻撃を、より複雑なインタラクティブな攻撃へ拡張
  • feColorMatrixfeDisplacementMapなどのSVGフィルター要素がcross-origin iframeにも適用可能であることが確認され、これにより視覚的な改ざんとデータ抽出が可能となる
  • フィルターの組み合わせによりピクセル読み取り、論理演算、条件付きUI操作が可能になり、多段クリックジャッキングや入力誘導型攻撃を実装できるようになった
  • 実際の例としてGoogle Docsの脆弱性を利用した攻撃が成功し、研究者はGoogle VRPから**$3133.70の報酬**を受け取った
  • この手法はブラウザセキュリティモデルの新たな攻撃面を示しており、SVGフィルターの論理的な活用がセキュリティ脅威へ発展しうることを明らかにしている

SVGクリックジャッキングの概要

  • 従来のクリックジャッキングは、iframeを重ねることでユーザーに意図しないクリックをさせる単純な攻撃構造
  • 新たに提示されたSVGクリックジャッキングは、SVGフィルターを使って複雑なインタラクションとデータ流出を可能にする
  • feColorMatrixfeDisplacementMapなどのフィルターはクロスオリジン文書にも適用され、外部コンテンツを視覚的に操作できる

SVGフィルターの構成要素

  • 主要なフィルター要素として**<feImage><feFlood><feOffset><feDisplacementMap><feGaussianBlur><feTile><feMorphology><feBlend><feComposite><feColorMatrix>**などがある
  • これらは入力画像を組み合わせ・変形して新しい画像を生成し、チェーンとして接続可能
  • このような組み合わせにより、攻撃者は視覚エフェクト、マスキング、色の操作などを自由に実装可能

攻撃例

  • フェイクキャプチャ(fake captcha)feDisplacementMapを使用してテキストを歪ませ、ユーザーに機密コードの入力を促す
  • グレーテキスト隠し(grey text hiding)feCompositefeMorphologyで入力欄の案内文やエラーメッセージを削除し、ユーザーに攻撃者が指定したパスワードを入力させる
  • ピクセル読み取り(pixel reading):特定のピクセルの色を検知してフィルター動作を制御し、ボタンのクリック・ホバー・入力状態検知などの動的レスポンス型攻撃を実装

論理演算と複合攻撃

  • feBlendfeCompositeを組み合わせることで、AND、OR、XOR、NOTなどの論理ゲートの実装が可能
  • これによりSVGフィルター内で完全な論理回路を構築でき、複数段階のクリックジャッキングシナリオを自動化可能
  • 例として**『Securify』アプリ攻撃**では、ダイアログの表示、チェックボックスのクリック、ボタンのクリックなど複数のステップを論理的に制御してユーザーをだます構造を実装

実際の事例:Google Docs脆弱性

  • Google Docsで「Generate Document」ボタンをクリックした後に表示されるポップアップと入力欄をSVGフィルターベースのロジックで検知・操作
  • 入力欄のフォーカス状態、グレー文字、ローディング画面をリアルタイムで検知して攻撃フローを制御
  • この攻撃はGoogleに報告され、$3133.70のバグバウンティが支払われた

QRコードの応用

  • SVGフィルター内でQRコード生成ロジックを実装し、ピクセルデータをURLとして符号化してQR形式で表示可能
  • ユーザーがQRをスキャンすると、攻撃者が管理するサーバーへデータが送信される
  • feDisplacementMapReed–Solomon誤り訂正を用いて、スキャン可能なQRコードを生成

追加の活用可能性

  • テキスト読み取り、クリックベースのデータ流出、偽のマウスカーソル挿入など、さまざまな攻撃の応用が可能
  • JavaScriptを使わずCSS/SVGだけで攻撃実装が可能なため、CSP回避の可能性がある

研究的意義

  • SVGフィルターを用いた論理演算ベースのクリックジャッキングは、既存の研究では扱われていない新しい攻撃手法
  • 過去の研究はSVGを単なる視覚的な隠蔽用途としてのみ言及していたが、本研究は論理実行とインタラクション制御を実証
  • 研究者はこれを新しい脆弱性クラスとして提示し、ブラウザセキュリティモデルの見直しの必要性を強調

マまとめ

  • 本研究は、SVGフィルターをプログラミング言語のように活用した初のセキュリティ攻撃事例として評価される
  • 著者は2025年末に39c3Disobey 2026で関連発表を予定
  • この投稿は画像・JSなしで42kBのHTML/CSS/SVGのみで作成されており、実験的セキュリティ研究の創造性を示している

1件のコメント

 
GN⁺ 2025-12-07
Hacker News の意見
  • 開発者が X-Frame-Options ヘッダーを適切に設定すれば、この問題は解決する
    ただ、現実にはセキュリティ問題を追いかけるうちに、ブラウザ側が SVG 仕様の半分を削除するような対応をしそうだ

    • それで完全に解決するわけではない。一部のアプリケーション(例: Google Docs)はフレーミングを必要とする
      また、フレームではなく HTML インジェクションが可能なサイトでもこの攻撃は成立する
    • SVG にはセキュリティ上の地雷が多すぎる。特にユーザー提供の SVG のように信頼できない場合は、単純に無効化するのがいちばん簡単だ
  • 私はすでにセキュリティ上の理由で SVG を無効にしている
    ただ、最近は CSS まで無効化しなければならないのではと思えてくる
    CSS が単にテキストを飾るためのもののままでいてくれたらよかったのに、今ではプログラミング言語のようになって、ハッカーや広告主に悪用されやすくなっている

    • 「CSS を単純なままにしておいてほしかった」という気持ちはわかるが、実際にはこうした攻撃は 2000年代後半のほうがずっと容易だった
      今ではほとんど不可能に近い
    • 私はセキュリティ強化のためにブラウザを壊すより、機密データそのものをブラウザの外に置くほうがよいと思う
    • 問題の本質は CSS ではなく iFrame だ。ブラウザ黎明期から続くセキュリティ脆弱性の根源だ
    • このデモ以外に別のセキュリティ上の理由があるのか気になる。ほとんどのプラットフォームではこの攻撃は機能しない
    • それは過剰反応だ。こうした攻撃に遭う確率は非常に低く、サンドボックスやセッションクッキーを突破することもできない
  • 「ピクセルが純粋な黒かどうかを検知してフィルターをオン・オフする例」を見て完全に混乱した
    なぜ HTML/CSS がここまで複雑になったのかわからない
    隠された <checkbox><label> があり、クリックするとチェックボックスがトグルされ、CSS だけで状態に応じてスタイルが変わる
    SVG は実際には何も描画せず、フィルターだけを定義している
    <feTile> が 2 つも使われていて、タイル領域と出力領域を別々に定義する構造も奇妙だ
    <fake-frame><art-frame> のような要素はいったい何なのか?

    • 私はこういう構造はかなり かっこいいと思う。JavaScript なしでもインタラクティブなコンテンツを作れる
      <label> のクリックでチェックボックスがトグルされるのは HTML の基本動作だ
      CSS の :has() セレクターを使って状態を検知している
      <feTile> は単一のフィルター要素で、入力画像をタイル化したりクロップしたりするために使う
      <fake-frame><art-frame> は自分で定義した カスタム要素
      関連内容はブログ記事にまとめた
    • 実際のところ、こうした機能の大半は「モダン」というより 90年代から存在していたもの
      <label> クリックでフォーカスが移るのはデスクトップ UI の伝統に従ったものだ
      チェックボックスの状態に応じてスタイルを変える機能も Firefox 1 の時代からあった
      SVG フィルターを HTML に直接埋め込むのも古くからある機能だ
      つまり、これは新しい HTML の問題というより 古い機能の組み合わせ
  • このデモを見て、昔の Flash Player ハックを思い出した
    ユーザーをだましてシステムストレージを許可させる、あの手法に似ている
    ベクターグラフィックスは本当に自制心のない存在のようだ

  • SVG adder は芸術作品のようだ。本当にすごい

    • とても強力なデモだった。今日初めて知ったが、チューリング完全性には単に機能完全性だけでは足りず、記憶領域とランダムアクセスが必要なのだと学んだ
      関連する内容は Stack Overflow の投稿 を参考にした
  • 私の Android Chrome(正確には Kiwi Browser)では、ダークモードのせいか画面が崩れたり妙に表示されたりする
    同じ現象が出ている人はいるだろうか

    • Firefox では Dark Reader をオフにしないと例が正しく表示されなかった
    • ズーム率が 100% でないとき、QR 関連の例が崩れる
  • この記事を読んで、以前見た CSS 計算デモ を思い出した

  • 本当に印象的な仕事だ。どう解決すべきかはわからないが、早急な修正が必要だ

  • とても素晴らしい投稿だった。読んでいるあいだずっと楽しかった