mcpField
R
reversing-browser-extensions

reversing-browser-extensions

github.com/trilwuセキュリティ17744 回インストール12 週間前に更新
リポジトリ

reversing-browser-extensions について

ブラウザー拡張機能と権限境界を調査するセキュリティスキルです。マニフェスト、メッセージ経路、権限、ネイティブ機能の公開状況を確認し、リスクを特定します。

主な機能

  1. 01マニフェストと要求権限の確認
  2. 02コンテンツスクリプトとバックグラウンド間の通信追跡
  3. 03送信元とオリジンの検証確認
  4. 04ネイティブメッセージング経路の調査
  5. 05データ流出と更新リスクの特定

活用シーン

  1. 01不明または過剰な権限を持つ拡張機能の評価
  2. 02メッセージ通信における権限昇格の監査
  3. 03実際の動作とストアの説明の照合
  4. 04ネイティブホストへのアクセス調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/trilwu/secskills --skill reversing-browser-extensions

インストール後、Claude Code で/reversing-browser-extensionsを入力して読み込まれたか確認します。

詳細

ブラウザー拡張機能のリバースエンジニアリング

ブラウザー拡張機能は、ユーザーが訪れるすべてのページのすぐそばで動作する、小さな特権プログラムです。そのセキュリティは、ほぼ全面的に境界に関わっています。コンテンツスクリプトは信頼できないウェブコンテンツのそばで動作しますが、実際の権限(Cookie、タブ、ネットワーク、場合によってはネイティブプロセス)を持つバックグラウンドコンテキストと通信できます。拡張機能のリバースエンジニアリングでは、この境界を読み解き、特権側が非特権側を信頼している箇所を見つけます。

使用する場面

  • 疑わしい拡張機能、過剰な権限を持つ拡張機能、または未知の拡張機能の動作を分析する場合
  • 拡張機能のマニフェストやメッセージパッシングを監査し、権限の漏えいを調べる場合
  • コンテンツスクリプトがバックグラウンドやネイティブの機能をページに公開する仕組みを調査する場合
  • 拡張機能が実際に何をするのかを、ストアの掲載内容と照らし合わせて確認する場合

使用しない場面

  • 拡張機能にバンドルされた JavaScript の難読化解除を、コード読解の問題として行う場合 — バンドルには reversing-obfuscated-javascript を使用し、その後ここに戻って権限モデルを調べてください。
  • インシデントの一環として、悪意のある拡張機能を実行し、IOC を抽出する場合 — analyzing-malware を使用してください。
  • 拡張機能が操作するウェブアプリケーションをテストする場合 — testing-web-applications を使用してください。
  • ブラウザーを内包しているデスクトップアプリの場合 — testing-thick-clients を使用してください。

コードを取得してマニフェストを読む

拡張機能は CRX(Chrome)または XPI(Firefox)として配布されます。どちらも ZIP アーカイブなので、展開して読みます。ストアの CRX エンドポイントから公開済みの拡張機能を取得することも、ブラウザープロファイルの Extensions ディレクトリから直接取得することもできます。

マニフェストは全体像を示すものです。コードを読む前に確認してください。

  • manifest_version — MV2(バックグラウンドページ、webRequest のブロック)と MV3(バックグラウンド サービスワーカー、declarativeNetRequest、リモートコード禁止)の違いです。バージョンによって、特権ロジックの配置場所と、その存続の仕方が変わります。
  • permissions と host_permissions — <all_urls>、tabs、cookies、webRequest、debugger、nativeMessaging、scripting。それぞれを、拡張機能がうたう機能と照らし合わせて判断してください。「ダークテーマ」拡張機能で <all_urls> と cookies が指定されていれば、要注意です。
  • content_scripts — 拡張機能が挿入されるページと、拡張機能がそのコンテンツに触れるページを確認します。
  • externally_connectable — どのウェブオリジンが拡張機能に直接メッセージを送信できるかを示します。許可範囲が広い場合は攻撃対象領域になります。
  • web_accessible_resources — ページが読み込める拡張機能のファイルです。拡張機能の存在が漏れたり、挿入可能なリソースが公開されたりするおそれがあります。
  • content_security_policy — 緩和された CSP(unsafe-eval、リモートスクリプト)は、コードインジェクションの攻撃対象領域になります。

信頼境界

拡張機能は設計上、分離されています。バグはコンテキスト間の境目にあります。

  • ページ ↔ コンテンツスクリプト。 コンテンツスクリプトは分離されたワールドで実行されます。ページと DOM は共有しますが、JS 変数は共有しません。漏えい経路は DOM と window.postMessage です。event.origin/event.source を確認せずに postMessage のデータに基づいて動作するコンテンツスクリプトがあると、その挿入範囲内のどのページからでも操作される可能性があります。
  • コンテンツスクリプト → バックグラウンド/サービスワーカー。 コンテンツスクリプトは、特権操作を行うために(chrome.runtime メッセージングを使って)バックグラウンドコンテキストへメッセージを中継します。バックグラウンドのハンドラーが送信元とメッセージの形式を検証しない場合、(コンテンツスクリプト経由で)侵害されたページや悪意のあるページが特権 API に到達します。これは拡張機能における中心的なバグです。ページが影響を与えられるメッセージだけで特権操作が許可されていることです。
  • onMessageExternal/externally_connectable。 ここに指定されたウェブページは、バックグラウンドと直接通信します。必要な検証は同じですが、経路が1段短くなります。
  • ネイティブメッセージング。 nativeMessaging は拡張機能をローカルのネイティブホストバイナリに接続します。この経路のメッセージ検証が不十分だと、ブラウザーからネイティブコードが実行される可能性があります。ネイティブホストが受信したデータをどう扱うか追跡してください。

特権機能ごとに、次の点を確認してください。どの入力がその機能に届くのか、また、どの範囲から届くのか(バックグラウンドのみ、コンテンツスクリプト、または任意のページ)。

注意すべき点

  • 機能に不釣り合いな、過剰に広い権限。
  • runtime.onMessage/onMessageExternal における未検証のメッセージ送信元。ページから拡張機能への権限昇格経路です。
  • コンテンツスクリプトにおける、オリジンを検証しない postMessage の処理。
  • リモートコード/eval、またはそれを許可する CSP(MV3 ポリシー違反でもあります)。
  • データの外部流出。明示された目的と無関係なエンドポイントへの通信、ページのコンテンツ、フォームフィールド、Cookie の読み取りと送信などです。
  • 未検証の入力に基づいて動作するホストへのネイティブメッセージング。
  • 更新/サプライチェーンのリスク。リモートの設定やコードを読み込む拡張機能、または最近所有者が変わった拡張機能などです。

必要に応じて難読化を解除する

ストアの拡張機能は、ミニファイまたはバンドルされていることが多く、悪意のある拡張機能は難読化されていることがあります。コードが読めない場合は、バンドルを reversing-obfuscated-javascript に渡してアンバンドルと難読化解除を行い、その後、復元されたロジックを上記の信頼境界に照らして確認してください。ブラウザーの拡張機能用 DevTools で実行中の拡張機能をデバッグし、実行時のメッセージのやり取りを監視してください。

退けるべきもっともらしい説明

  • 「ストアの審査を通っているから問題ない。」 ストアの審査は表面的で、定期的に回避されています。所有者が変われば、問題のなかった拡張機能が1回のアップデートで悪意のあるものに変わる可能性があります。実際に配布されているコードを読んでください。
  • 「コンテンツスクリプトはサンドボックス化されているから、ページの侵害が拡張機能に及ぶことはない。」 分離されたワールドが分離するのは JS であり、DOM や postMessage ではありません。未検証のメッセージハンドラーが橋渡しになります。
  • 「バックグラウンドはメッセージを中継するだけだ。」 ページの影響を受けるメッセージを、送信元を検証せずに特権 API へ中継しているなら、その中継が脆弱性です。
  • 「必要な権限だけを求めている。」 実際の挙動と照らし合わせて確認してください。<all_urls>、cookies、debugger、nativeMessaging は、小さなバグを大きな問題に発展させる権限です。
  • 「ミニファイされているからレビューできない。」 ミニファイは元に戻せます。まずアンバンドルと難読化解除を行い、その後レビューしてください。

参考資料

  • reversing-obfuscated-javascript — 拡張機能の JS のアンバンドルと難読化解除
  • analyzing-malware — 悪意が確認された拡張機能の実行環境での分析と IOC
  • testing-web-applications — 拡張機能が通信するサイトと API
  • auditing-supply-chain — 所有者変更とリモートコード更新のリスク

コメント