全球數十億台裝置上都安裝了網頁瀏覽器,因此成為網路罪犯的首要攻擊目標。由於主要的網頁瀏覽器擁有龐大的使用者群,因此單一的漏洞就可能造成深遠的影響。保持瀏覽器更新對於防範不斷演化的威脅至關重要。
為了說明網頁瀏覽器漏洞的嚴重性,我們的研究員對 CVE-2024-6778 進行了廣泛的分析,這是基於 Chromium 瀏覽器的漏洞,尤其影響 Chrome DevTools。本部落格將詳細檢視該漏洞的技術層面、潛在影響及減緩策略。
CVE-2024-6778 的背景
CVE-2024-6778 是在 Chrome DevTools 發現的競賽條件漏洞。它可讓攻擊者透過惡意的瀏覽器擴充套件,將惡意的 HTML 或 JavaScript 注入有權限的瀏覽器頁面。根據 NVD(國家漏洞資料庫),此漏洞已被評為高度嚴重性,CVSS 得數為 8.8。
此漏洞的嚴重性評級很高,因為它有可能導致遠端執行程式碼,進而危及系統、損害機密性並降低可用性。
Chromium 安全性概述
要深入瞭解 CVE-2024-6778 的影響,必須先瞭解 Chromium 安全模型的關鍵面向。Chromium 是 Google Chrome、Microsoft Edge、Opera 和 Brave 等瀏覽器的開源基礎。它採用多進程模式,其中每個索引標籤 (也稱為呈現器) 和各種瀏覽器元件都在獨立的進程中執行,藉由限制潛在危機的範圍來增強穩定性和安全性。
Chromium 安全性的基本要素是其沙盒機制,它限制渲染器進程直接存取系統資源。相反地,所有互動都是透過 IPC(Inter-Process Communication,進程間通訊)通道來管理,以確保只執行授權的作業。
並非所有 Chromium 內的元件都受完全沙盒限制。網頁使用者介面 (WebUI) 頁面,例如chrome://settings 和 chrome://downloads,會在渲染器程序中渲染,但會在部分沙箱限制下運作。此程序允許它們存取通常無法透過網頁存取的瀏覽器 API。
例如,chrome://policy頁面在企業環境中扮演重要角色,因為它可讓管理員和使用者設定並執行瀏覽器安全政策。這些政策也可透過 Windows 系統上的群組政策來管理。
由於chrome://policy可以直接與作業系統互動,因此成為攻擊者的重要目標。由於 CVE-2024-6778 漏洞利用了 Chrome DevTools 內的競賽條件,攻擊者可將惡意程式碼注入這些頁面,造成嚴重的安全風險。
CVE-2024-6778 的技術分析
發現
在 Chrome 企業版 117 中引入的測試功能中發現此漏洞。此功能可透過chrome://policy/test頁面進行政策測試。由於有關此功能的官方文件有限,我們的研究人員對 Chromium 原始碼進行了徹底的檢驗,並輔以 CVE 作者的見解,以充分瞭解其實作,並找出相關的安全漏洞。
政策管理元件
OPSWAT 研究員的原始碼分析顯示,在 chrome://policy/test使用 政策資訊
介面,並在 WebUI 與瀏覽器程序之間透過 政策測試瀏覽器代理
班級。的 政策資訊
結構定義如下:
透過進一步檢查負責處理這些政策的類別,確定了一種名為 applyTestPolicies
.此方法利用私人API、 setLocalTestPolicies
, 動態套用政策清單。
為了深入瞭解如何透過此API 處理政策請求,研究人員分析了 處理設定本地測試政策
方法中的 PolicyUIHandler
類:
這 處理設定本地測試政策
方法從提供的參數中擷取政策資料,並取得指向 本地測試政策提供者
實例。然後,它會驗證此提供者是否存在,然後才指示目前的使用者設定檔使用它。
發現這項驗證並不足夠,因為它只能確保 本地測試提供者
為非空,然後才套用政策。的建立和初始化。 本地測試提供者
由 如果允許,請建立
方法:
在 如果允許,請建立
方法,返回值完全取決於 IsPolicyTestingEnabled (是否啟用政策測試)
功能。此功能可判斷 本地測試政策提供者
會根據使用者偏好和瀏覽器的釋放通道組合來建立:
自 前置服務
每次 IsPolicyTestingEnabled()
被呼叫時,第一個條件就會被繞過,使啟用決定完全依賴瀏覽器的釋放通道。
在非品牌的 Chromium 建置中,釋出頻道預設為 頻道::UNKNOWN
.根據功能的邏輯、 頻道::UNKNOWN
與 頻道::DEFAULT
,預設啟用了政策測試功能。程式碼流分析顯示私有API setLocalTestPolicies
可透過 WebUI 啟用,以套用政策,而無需任何有意義的存取限制。
開發
透過識別並利用此私有API,攻擊者可透過 WebUI 任意套用政策,從而竄改設定,例如 已啟用瀏覽器切換器
, BrowserSwitcherUrlList
, 替代瀏覽器路徑
以及 替代瀏覽器參數
來執行指令。例如,透過設定 替代瀏覽器路徑
到 powershell 和 替代瀏覽器參數
至 [「計算」]
當瀏覽特定 URL 時,可執行任意 shell 指令。
透過私人API套用任意惡意使用者政策
為了說明如何使用私人 setLocalTestPolicies
在之前的分析中識別出的API ,以下 JavaScript 程式碼是設定 允許恐龍復活蛋
政策,並透過 WebUI
調用 setLocalTestPolicies
:
可成功套用政策來停用 允許恐龍復活蛋
設定。
為了產生更大的影響,攻擊者可能會針對 瀏覽器切換器
政策:
如果 URL 符合特定條件,此策略可讓瀏覽器調用另一個瀏覽器路徑。可透過設定此路徑,使其指向系統可執行檔,以執行作業系統指令來加以利用。下面的 JavaScript 程式碼演示了這種方法:
此指令碼執行下列任務:
- 啟用
瀏覽器切換器
example.com 的功能 - 設定 PowerShell 的替代瀏覽器路徑
- 執行
煆燒
每當存取指定的 URL 時。
惡意 Chrome 擴充套件模擬
識別允許應用政策的私有API 為攻擊者引入了一個重要的攻擊媒介。要有效利用此漏洞,攻擊者需要開發一個惡意的 Chrome 擴充套件,使用 Chrome DevToolsAPI 來執行惡意的 JavaScript 程式碼。
為了展示潛在的真實世界影響,我們的研究人員模擬了一個情境,在易受攻擊的瀏覽器上安裝了惡意的Chrome擴充套件,並利用它來執行攻擊。Chrome 擴充套件中的chrome.devtoolsAPI 可讓開發人員擴充 Chrome 的 DevTools 介面並與之互動。
然而,透過擴充套件執行 DevToolsAPI 來某些必須繞過的挑戰。首先,DevToolsAPI 只有在 DevTools 開啟並主動檢視網站時才能運作。其次,DevToolsAPI 不允許在網頁使用者介面 WebUI 上執行程式碼。此限制有助於在開發和檢測過程中維護 WebUI 的安全性和完整性。
透過 reloadAPI執行 Javascript 的指示符號
進一步分析發現,chrome.devtools.inspectedWindow.reload函式缺乏驗證功能,無法確認是否允許擴充套件在檢視頁面上執行腳本。它唯一的防禦層級是 devtools 延伸伺服器,一旦被檢查頁面的 URL 變更,它就會阻止存取。
about:blank 頁面會繼承開啟頁面的權限和來源。這表示當從 WebUI 訊號重定向時,在 about:blank 上執行程式碼的能力是潛在的漏洞。
透過 reloadAPI在 webUI 上執行程式碼
在 chrome.devtools.inspectedWindow.reload()
允許在 Chrome 的 WebUI 頁面上執行程式碼 (例如:chrome://policy),這些頁面通常受到保護。此漏洞利用 reloadAPI 在頁面轉換期間注入 JavaScript 的能力。以下是它的運作方式:
- 目標 WebUI:在索引標籤中開啟 WebUI 頁面 (例如,chrome://policy),並附加 DevTools。
- 注入腳本:使用 reload()API 與
injectedScript
參數,以便在重新載入時執行任意 JavaScript。 - 利用競賽條件:當重新載入在 WebUI 的安全機制完全初始化之前觸發,允許注入的腳本執行時,就會發生競爭條件。
在從 about:blank 頁面導航到 chrome://policy 的情況下:
由於驗證的只是 URL 而非頁面的來源,因此瀏覽後會有一段短時間,來源會反映新的頁面,而 URL 則維持不變。
如果 chrome.devtools.inspectedWindow.reload
在此視窗中被調用時,可能會在目的地頁面上無意間執行 JavaScript。
提高賽事條件下的可靠性
由於對時間的依賴,利用競賽條件本身就是不可靠的。此外,快速重新載入或不正確的腳本也會造成頁面當機。提高可靠性的新方法是故意誘發頁面當機,因為透過 DevTools 發出的指令通常會在當機期間取消,但是 頁面重新載入
映射至 chrome.devtools.inspectedWindow.reload()
被列入白名單,並在頁面重新載入後執行。
以下是透過推送後續指令使頁面崩潰的工作流程模型:
內容腳本中的除錯器語句會引發當機
連續兩次使用除錯器會中斷內容指令碼的導覽程序。它可能會導致當機,將 navigation_commit_state_
進入意料之外的狀態。當 RenderFrameImpl::SynchronouslyCommitAboutBlankForBug778318
被執行、 變更 _navigation_commit_state
為意外值。
第一次調用會暫停執行,讓 navigation_commit_state_
在不一致的狀態下,而第二個會暫停在 CHECK_EQ
檢查,導致狀態驗證失敗並造成當機。
修復
忽略定期更新瀏覽器版本可能會使您的裝置暴露於嚴重的安全威脅,尤其是那些與 CVE(共通漏洞和暴露)相關的威脅。為了幫助降低此風險,MetaDefender Endpoint™透過偵測您的瀏覽器版本和檢查漏洞(包括已知的 CVE,如 CVE-2024-6778)提供強大的保護。
MetaDefender Endpoint 可確保您的應用程式為最新版本,並標示任何過時或受感染的版本。它還會根據 CVE 嚴重性列出已知漏洞的已安裝應用程式,並建議修復方法,以有效降低潛在威脅。若要觀看MetaDefender Endpoint 如何協助您降低這些風險的即時示範,請立即與我們的專家聯絡。