Chrome V8引擎Sentinel Value安全隱患深度分析

robot
摘要生成中

深入探討Chrome V8引擎中Sentinel Value的安全隱患

Sentinel value是算法中的一種特殊值,通常用作循環或遞歸算法中的終止條件。Chrome源碼中廣泛使用了Sentinel value。近期,安全研究人員發現可以通過泄露TheHole對象實現Chrome沙箱內任意代碼執行。谷歌團隊迅速修復了這一漏洞。

然而,V8中還存在其他不應泄露到JavaScript中的原生對象。本文將重點討論Uninitialized Oddball對象,該對象的泄露可能導致更廣泛的安全隱患。目前,該方法仍可用於最新版V8,谷歌尚未針對此問題進行修復。

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

  1. CVE-2021-30551中首次提出了泄露internal uninitialized oddball的poc。

  2. CVE-2022-1486的poc中也直接泄露了UninitializedOddball。

  3. Issue1352549(尚未分配CVE)展示了完整的利用代碼。

這些案例充分說明了對可能受影響軟件進行全面檢查的必要性。截至目前,Skype仍未修復該漏洞。

V8中的Sentinel Value

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

爲驗證該方法在最新版V8中的有效性,我們可以通過修改V8的native函數,將Uninitialized Oddball泄露到JavaScript中。具體方法是修改%TheHole()函數中相對isolate的偏移,使其返回Uninitialized Oddball。

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

繞過HardenType保護

通過簡化Issue1352549中給出的代碼,我們可以在V8 11.0.0版本中實現相對任意讀取:

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

當%TheHole()返回UninitializedOddball時,優化後的JavaScript read函數會直接按JavaScript語義計算偏移,而不檢查obj.prop的Value,從而導致類型混淆,實現任意讀取。

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

與TheHole對象類似,由於uninitialized_oddball在V8內存中排序靠前且更原始,更易於僞造。在TheHole緩解措施被繞過後,該方法成爲首選繞過方案。

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

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

PatchGap警告

分析Issue1352549後,我們發現Skype目前仍未修復該漏洞。在x86環境下,任意讀寫略有不同:由於沒有地址壓縮,任意讀寫直接相對於整個進程。

雖然Skype啓用了ASLR,但由於文件較大,直接放在4GB內存中,攻擊者只需對特定地址進行讀寫,就有很大概率讀寫到Skype文件內容。結合PE解析等傳統方法,完成整個漏洞利用鏈並非難事。

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

這次PatchGap不僅涉及Issue1352549,新繞過方法的公開還大大降低了類似CVE-2022-1486和CVE-2021-30551的利用難度。攻擊者幾乎無需額外研究即可完整利用任何泄露uninitialized_oddball的漏洞。

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

總結

本文簡要討論了通過泄露Sentinel value中的uninitialized_Oddball來實現任意讀取原語。V8中還存在其他Sentinel value,測試時也經常遇到崩潰。鑑於Uninitialized_Oddball和TheHole均可在V8中實現環節繞過,我們有理由懷疑其他Sentinel value也可能導致類似問題。

這給我們以下啓示:

  1. 其他uninitialized_Oddball泄露是否也能輕易實現V8的RCE。

  2. 谷歌迅速修復TheHole繞過,但長期擱置利用垃圾回收實現ASLR繞過,表明此類問題是否被視爲正式安全問題仍存在模糊邊界。

  3. 如果將其視爲正式安全問題,是否有必要在fuzzer中將%TheHole/uninitialized_Oddball等Sentinel value作爲變量加入,以發掘其他利用原語。

無論如何,這類問題都會大大縮短攻擊者實現完整利用的週期。

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

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

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

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 讚賞
  • 3
  • 分享
留言
0/400
GateUser-afe07a92vip
· 19小時前
谷歌搞啥呢这也漏
回復0
SelfRuggervip
· 19小時前
看来 V8 今年要出大事了
回復0
薛定谔的gasvip
· 19小時前
睡了一宿还在干活的v8,这波gas谁来掏?
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)