AIハッキング - ハッカーは人工知能をサイバー攻撃にどう利用するか

今すぐ読む
サイト翻訳には人工知能を利用しており、正確性を追求しておりますが、必ずしも100%正確とは限りません。ご了承ください。

CVE-2024-6778: Chrome DevToolsにおけるレースコンディションの脆弱性の包括的な分析

By OPSWAT
この記事を共有する

ウェブブラウザは世界中で何十億台ものデバイスにインストールされており、サイバー犯罪者にとって格好の標的となっています。主要なウェブブラウザは膨大な数のユーザーを抱えているため、一つの脆弱性が広範囲に影響を及ぼす可能性があります。ブラウザを常に最新の状態に保つことは、進化する脅威から身を守るために非常に重要です。  

ウェブブラウザの脆弱性の深刻さを説明するために、我々のフェローは、Chromiumベースのブラウザの脆弱性であるCVE-2024-6778、特にChrome DevToolsに影響を及ぼす脆弱性について広範な分析を行いました。このブログでは、脆弱性の技術的側面、潜在的な影響、緩和策について詳しく検証しています。  

Chrome DevToolsの脆弱性CVE-2024-6778について2人の研究者がクレジットされ、大学の所属が示される

CVE-2024-6778の背景

CVE-2024-6778 は、Chrome DevTools に発見された競合状態の脆弱性です。この脆弱性により、攻撃者は悪意のあるブラウザ拡張機能を介して、特権を持つブラウザページに悪意のあるHTMLやJavaScriptを注入することが可能になります。NVD(National Vulnerability Database)によると、この脆弱性はCVSSスコア8.8で、深刻度が高いと評価されています。  

この脆弱性の深刻度が高いのは、リモートでのコード実行を可能にする可能性があるためであり、その結果、システムを侵害し、機密性を損ない、可用性を低下させる可能性があります。  

CVE-2024-6778 Chrome DevToolsの脆弱性の詳細とCVSSの高重篤度スコアを示すUIスクリーンショット

Chromium セキュリティの概要

CVE-2024-6778の意味をより深く理解するためには、Chromiumのセキュリティ・モデルの重要な側面について知ることが重要です。Chromiumは、Google Chrome、Microsoft Edge、Opera、Braveなどのブラウザのオープンソース基盤です。Chromiumはマルチプロセス・モデルを採用しており、レンダラーとも呼ばれる各タブやさまざまなブラウザ・コンポーネントが分離されたプロセスで実行され、潜在的な侵害の範囲を限定することで安定性とセキュリティを高めています。 

Chromiumのセキュリティの基本的な要素は、レンダリングプロセスがシステムリソースに直接アクセスすることを制限するサンドボックス機構です。代わりに、すべての相互作用は、許可された操作のみが実行されることを保証するために、IPC(プロセス間通信)チャネルを介して管理されます。  

Chromium 内のすべてのコンポーネントが完全なサンドボックスの対象となるわけではありません。chrome://settings や chrome://downloads などの WebUI ページは、レンダラー処理内でレンダリングされますが、部分的なサンドボックス制限で動作します。このプロセスにより、通常は Web 経由ではアクセスできないブラウザ API にアクセスできるようになります。

CVE-2024-6778 Chrome DevToolsの脆弱性に関連するポリシー名、値、ステータスを表示するChromeポリシー設定UI

例えば、chrome://policyページは、管理者とユーザーがブラウザのセキュリティポリシーを設定し、実施することを可能にするため、企業環境において重要な役割を果たしている。これらのポリシーは、Windows システムのグループ ポリシーでも管理されます。  

chrome://policyはオペレーティングシステムと直接やり取りできるため、攻撃者にとって貴重な標的となります。Chrome DevTools内の競合状態を悪用する脆弱性CVE-2024-6778により、攻撃者はこれらのページに悪意のあるコードを注入することができ、深刻なセキュリティリスクをもたらす。  

CVE-2024-6778のテクニカル分析

発見

この脆弱性は、Chrome Enterprise バージョン 117 で導入されたテスト機能で発見されました。この機能により、chrome://policy/testページを通じたポリシーのテストが可能になります。この機能に関する公式文書が限られているため、私たちの研究者は、その実装を完全に理解し、関連するセキュリティ脆弱性を特定するために、Chromium のソースコードを徹底的に調査し、CVE の作者からの洞察を補足しました。

ポリシー管理コンポーネント 

OPSWAT フェローがソースコードを分析した結果、以下のことが判明しました。 chrome://policy/testポリシーは ポリシー情報 インタフェースを介して、WebUIとブラウザのプロセス間で通信される。 ポリシーテストブラウザプロキシ クラスである。その ポリシー情報 構造は以下のように定義されている:  

CVE-2024-6778 Chrome DevToolsの脆弱性におけるポリシー管理コンポーネントを示すPolicyInfoのためのTypeScriptインターフェイス

これらのポリシーの取り扱いを担当するクラスをさらに調べると、次のようなメソッドが特定されました。 適用テストポリシー.このメソッドはプライベートAPI利用する、 setLocalTestPoliciesポリシーのリストを動的に適用する。

CVE-2024-6778 Chrome DevToolsの脆弱性に関連するポリシー管理ロジックを示すコード・スニペット

このAPI経由してポリシーリクエストがどのように処理されるかを理解するために、研究者たちは次のような分析を行いました。 HandleSetLocalTestPolicies メソッド内の ポリシーUIハンドラ クラスです: 

CVE-2024-6778 Chrome DevToolsの脆弱性に関連するポリシー管理ロジックを示すコード・スニペット

について HandleSetLocalTestPolicies メソッドは、提供された引数からポリシーのデータを取得し、そのポインタを LocalTestPolicyProvider インスタンスを生成する。そして、現在のユーザープロファイルにこのプロバイダを利用するように指示する前に、このプロバイダの存在を検証する。  

この検証は不十分であることが判明しました。 ローカルテストプロバイダー は、ポリシーを適用する前に非NULLです。ポリシーの作成と初期化は ローカルテストプロバイダー によって制御されています。 作成が許可されている場合 メソッドを使用:  

CVE-2024-6778 Chrome DevToolsの脆弱性ポリシー管理に関連する、ChromeのLocalTestPolicyProviderのC++コード。

その中で 作成が許可されている場合 メソッドの結果に依存すします。 IsPolicyTestingEnabled 関数を使用します。この関数は LocalTestPolicyProvider インスタンスは、ユーザーの好みとブラウザーのリリース・チャンネルの組み合わせに基づいて作成されます: 

C++ コードがポリシーのテストステータスをチェックし、ポリシー管理における CVE-2024-6778 Chrome DevTools の脆弱性に関連する。

それ以来 pref_service は常にNULLに設定されます。 IsPolicyTestingEnabled() が呼び出されると、最初の条件はバイパスされ、有効化の判断はブラウザのリリース・チャンネルのみに依存することになります。

ノーブランドの Chromium ビルドでは、リリースチャネルのデフォルトは チャンネル::UNKNOWN.関数のロジックによれば チャンネル::UNKNOWN と同じ扱いである。 チャンネル::DEFAULTこれはデフォルトでポリシー・テスト機能を有効にする。コードフロー解析の結果、プライベートAPI setLocalTestPolicies をWebUI経由で呼び出して、意味のあるアクセス制限なしにポリシーを適用することができる。 

開発

このプライベートAPI特定し活用することで、攻撃者はWebUIを通じて任意にポリシーを適用することができ、以下のような設定を操作することが可能になります。 ブラウザスイッチャー有効, ブラウザスイッチャURLリスト, 代替ブラウザパスそして AlternativeBrowserParameters を設定してコマンドを実行する。例えば 代替ブラウザパス にパワーシェルと AlternativeBrowserParameters への ["calc"]。特定のURLにアクセスすると、任意のシェルコマンドを実行できます。

プライベートAPI経由で任意の悪意のあるユーザーポリシーを適用する

どのようにポリシーを適用できるかを示すために、プライベート setLocalTestPolicies 先の分析で特定されたAPI 、以下のJavaScriptコードが AllowDinosaurEasterEgg を通じて効果的に適用される。 ウェブユーアイ を呼び出して setLocalTestPolicies:

JavaScriptコードがプライベートAPI経由でChromeポリシーを設定し、CVE-2024-6778 Chrome DevToolsの脆弱性を示す

を無効にするポリシーを適用することができます。 AllowDinosaurEasterEgg セッティング

Chrome DevToolsの脆弱性CVE-2024-6778を示す、プライベートAPI経由でのポリシー変更を示すChrome DevTools

より大きな影響を与えるために、攻撃者は次のような標的を設定することができます。 ブラウザスイッチャー というポリシーがあります:

CVE-2024-6778 Chrome DevToolsの脆弱性とプライベートAPI 悪用に関連する、ブラウザ切り替えポリシーを示すJSONコンフィグ

このポリシーは、URLが特定の条件に一致する場合に、ブラウザが代替のブラウザパスを呼び出すことを可能にします。このパスを、オペレーティング・システムのコマンドを実行するシステム実行可能ファイルを指すように設定することで、悪用することができます。次のJavaScriptコードは、この方法を示しています:

Chrome DevTools の脆弱性 CVE-2024-6778 を悪用した JavaScript コードが、プライベートAPI悪意のあるユーザーポリシーを設定する

このスクリプトは以下のタスクを実行します: 

  • ブラウザスイッチャー example.comを有効にする 
  • 代替ブラウザのパスをpowerShellに設定する 
  • calc 指定されたURLにアクセスするたびに実行
CVE-2024-6778 Chrome DevToolsの脆弱性を示す、Chromeポリシー、DevToolsコード、電卓アプリを示すUI

悪意のあるクローム拡張機能のシミュレーション

ポリシーの適用を可能にするプライベートAPI 特定することは、敵対者にとって重要な攻撃ベクトルを導入することになります。この脆弱性を効果的に悪用するには、攻撃者はChrome DevToolsAPI 使用して悪意のあるJavaScriptコードを実行する悪意のあるChrome拡張機能を開発する必要があります。  

潜在的な実世界への影響を実証するために、我々の研究チームは、悪意のあるChrome拡張機能が脆弱なブラウザにインストールされ、攻撃の実行に使用されるシナリオをシミュレートしました。Chrome拡張機能のchrome.devtoolsAPIにより、開発者はChromeのDevToolsインターフェイスを拡張し、相互作用することができます。  

しかしながら、拡張機能を通してDevToolsAPI 実行することは、迂回しなければならないある種の課題を提示します。第一に、DevToolsAPI 、DevToolsが開いていて、ウェブサイトをアクティブに検査しているときのみ動作可能です。第二に、DevToolsAPI 、ウェブ・ユーザー・インターフェイス、WebUI上でのコード実行を許可しません。この制限は、開発および検査プロセス中のWebUIのセキュリティと完全性を維持するのに役立ちます。

リロードAPIJavascript実行を示すサイン

さらに分析を進めると、chrome.devtools.inspectedWindow.reload関数には、拡張機能が検査されたページでスクリプトを実行することを許可されているかどうかを確認するための検証が欠けていることが判明しました。唯一の防御手段はdevtools拡張機能サーバーで、検査されたページのURLが変更されるとアクセスをブロックします。  

リロードAPI介したCVE-2024-6778 Chrome DevToolsの脆弱性に関するinspectedWindow.reload()の動作を示すフローチャート

about:blank ページはそれを開いたページのパーミッションとオリジンを継承します。これは、WebUIのシグナルからリダイレクトされたときにabout:blank上でコードを実行する能力が潜在的な脆弱性であることを意味します。

リロードAPI介したWebUI上でのコード実行

レースコンディション chrome.devtools.inspectedWindow.reload() を使用すると、通常保護されているChromeのWebUIページ(例:chrome://policy)でコードを実行できます。この悪用は、ページ遷移中にJavaScriptを注入するリロードAPI機能を利用します。以下がその仕組みです:

  • WebUIをターゲットにする:タブでWebUIページ(例:chrome://policy)を開き、DevToolsをアタッチする。
  • スクリプトを注入する:reload()API 注入スクリプト パラメータを使用して、リロード中に任意のJavaScriptを実行することができます。
  • レースコンディションの悪用:レースコンディションは、WebUIのセキュリティメカニズムが完全に初期化される前にリロードがトリガーされ、注入されたスクリプトが実行されることで発生します。

about:blankページからchrome://policyにナビゲートするという文脈で:  

ナビゲーション中のリロードAPI オリジンセットを介したChrome DevToolsの脆弱性CVE-2024-6778を示す図

ページのオリジンの代わりにURLのみが検証されるため、ナビゲーションの後、URLは変更されないまま、オリジンが新しいページを反映する短い期間が存在します。

もし chrome.devtools.inspectedWindow.reload がこのウィンドウの間に呼び出された場合、意図せずにJavaScriptを実行する可能性があります。

レース・コンディションでの信頼性向上

レースコンディションを悪用することは、タイミングに依存するため、本質的に信頼性が低い。さらに、急激なリロードや不正なスクリプトは、ページクラッシュを引き起こす可能性がある。信頼性を向上させるための新しいアプローチは、意図的にページ・クラッシュを誘発することです。 ページリロード にマップされる。 chrome.devtools.inspectedWindow.reload() はホワイトリストに登録され、ページのリロード後に実行される。

CVE-2024-6778 Chrome DevToolsの脆弱性の競合状態に関連する、Chrome DevToolsの保留メッセージを処理するC++コード

以下は、後続のコマンドをプッシュしてページをクラッシュさせるワークフローモデルです:  

CVE-2024-6778 Chrome DevTools 脆弱性によるレースコンディションの信頼性向上プロセスを示す図

コンテンツ・スクリプトのデバッガ・ステートメントがクラッシュを引き起こすことがある

デバッガーを連続して2回使用すると、コンテンツスクリプトのナビゲーションプロセスが中断されます。デバッガを ナビゲーション・コミット状態 を予期せぬ状態にしてしまう。この問題は次のような場合に発生します。 RenderFrameImpl::SynchronouslyCommitAboutBlankForBug778318 が実行される、 navigation_commit_stateの変更 を予想外の値に変更しました。

CVE-2024-6778 Chrome DevTools脆弱性クラッシュに関連するナビゲーションのコミット・チェックを示すコード・スニペット
CVE-2024-6778 Chrome DevToolsの脆弱性クラッシュに関連するナビゲーションのコミット・ステート・ロジックを示すコード・スニペット

最初の呼び出しは実行を一時停止し ナビゲーション・コミット状態 の間は一時停止する。 CHECK_EQ チェックに失敗し、状態検証に失敗してクラッシュを引き起こします。

修復

ブラウザのバージョンの定期的なアップデートを怠ると、デバイスが深刻なセキュリティ脅威、特にCVE(共通脆弱性と暴露)に関連する脅威にさらされる可能性があります。このリスクを軽減するために、MetaDefender Endpoint™はブラウザのバージョンを検出し、CVE-2024-6778のような既知のCVEを含む脆弱性をチェックすることで、強固な保護を提供します。  

MetaDefender Endpoint 、アプリケーションが最新であることを確認し、古いバージョンや感染しているバージョンにフラグを立てます。また、既知の脆弱性を持つインストールされたアプリケーションをCVE深刻度別にリストアップし、潜在的な脅威を効果的に軽減するための修正を推奨します。MetaDefender Endpoint どのようにこれらのリスクを軽減するのに役立つのか、ライブデモをご覧になりたい方は、今すぐ弊社のエキスパートにお問い合わせください。 

OPSWATで最新情報をお届けします!

今すぐご登録ください、 ストーリー、イベント情報などをお届けします。