V8引擎Sentinel Value泄露引發安全風險 Uninitialized Oddball成新型攻擊向量

robot
摘要生成中

Chrome v8引擎中Sentinel Value泄露導致的安全問題分析

Sentinel value是算法中的特殊值,通常在循環或遞歸算法中作爲終止條件使用。Chrome源碼中存在多個Sentinel value,其中一些如果泄露到JavaScript環境中可能導致安全問題。

之前有研究表明,通過泄露TheHole對象可以實現Chrome沙箱內任意代碼執行。谷歌團隊在此後不久對相關CVE進行了修復。然而,除了TheHole對象外,v8中還有其他不應泄露到JS中的原生對象。本文將討論Uninitialized Oddball對象,這種繞過方法目前仍可用於最新版V8。

值得注意的是,這種方法具有一定通用性:

  1. 在CVE-2021-30551中,最初的POC就是泄露internal uninitialized oddball。

  2. 在CVE-2022-1486中,POC也直接泄露了UninitializedOddball。

  3. Issue1352549(未分配CVE)中給出了完整利用代碼。

這些案例表明,Uninitialized Oddball的泄露可能導致嚴重的安全問題。

V8中的Sentinel Value

V8的大部分原生對象定義在v8/src/roots/roots.h文件中,這些對象在內存中依次相鄰排布。如果將不應泄露的原生對象泄露到JavaScript中,可能實現沙箱內任意代碼執行。

爲驗證這一點,我們可以修改V8的native函數,將Uninitialized Oddball泄露到JavaScript中。具體可以修改%TheHole()函數中相對isolate的偏移,使其返回Uninitialized Oddball。

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

繞過HardenType保護

利用Uninitialized Oddball可以實現相對任意讀。關鍵代碼如下:

javascript function read(obj, idx) { return obj[idx]; }

let uninitialized_oddball = %TheHole(); let ab = new ArrayBuffer(8); let fa = new Float64Array(ab); let ia = new BigInt64Array(ab);

let evil = [1.1, 2.2, 3.3]; evil.prop = 1;

%PrepareFunctionForOptimization(read); read(evil, 0); read(evil, 1); %OptimizeFunctionOnNextCall(read); read(evil, 0);

let val = read(uninitialized_oddball, "prop"); fa[0] = val; console.log(ia[0]);

在優化後的匯編代碼中,會直接按JavaScript語義計算偏移並返回數組值,而沒有檢查obj.prop爲key的Value。這導致了類型混淆,從而實現任意讀。

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

由於Uninitialized Oddball在V8內存中排序靠前且更原始,比TheHole對象更容易僞造,是繞過HardenType的首選方法。

建議的修復方案是在優化後的函數返回數組元素時,添加對數組map的檢查,避免直接計算偏移返回數組值。

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

PatchGap警告

分析Issue1352549後發現,某些軟件可能存在PatchGap問題。例如Skype目前仍未修復該漏洞。在x86平台下,由於沒有地址壓縮,任意讀寫是相對於整個進程的。

雖然Skype開啓了ASLR,但由於文件較大,黑客只需對某個固定地址進行讀寫,就有很大概率讀寫到Skype文件內容。結合PE解析等傳統方法,可以完成整個漏洞利用鏈。

這次PatchGap不僅涉及Issue1352549,還會導致類似CVE-2022-1486和CVE-2021-30551等漏洞的利用難度大幅降低。黑客幾乎不需要額外研究即可實現完整利用。

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

總結

本文簡要討論了通過泄露Uninitialized Oddball實現任意讀原語的方法。V8中還有許多其他Sentinel value,可能存在類似安全隱患。這給我們以下啓示:

  1. 其他Uninitialized Oddball泄露是否也可輕易實現V8 RCE。

  2. 此類問題是否應被正式視爲安全問題仍存在爭議。

  3. Fuzzer中是否有必要將%TheHole/Uninitialized Oddball等作爲變量加入,以挖掘新的利用原語。

無論如何,這類問題都會大大縮短黑客實現完整利用的週期,值得我們高度重視。

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

獨家揭祕通過泄露Sentinel Value繞過Chrome v8 HardenProtect

SENC2.25%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
幻觉丛生vip
· 7小時前
卧槽 咋还能泄露呢
回復0
代码审计姐vip
· 7小時前
又一个CVE变种攻击面 啧啧
回復0
巨鲸资深观察员vip
· 7小時前
谷歌这是玩火呢?开历史倒车
回復0
BearMarketSurvivorvip
· 7小時前
真就修不完的bug
回復0
Crypto冒险家vip
· 7小時前
又到了交智商税的好时候?懂得都懂
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)