Chrome V8引擎Sentinel value泄露導致沙箱逃逸風險

robot
摘要生成中

Sentinel value在Chrome V8中的應用及其安全影響

Sentinel value是算法中的特殊值,常用於循環或遞歸算法的終止條件。Chrome V8引擎源碼中廣泛使用了Sentinel value。近期,安全研究人員發現通過泄露特定Sentinel value對象可以實現Chrome沙箱內任意代碼執行。

V8中存在多種原生對象不應泄露到JavaScript環境中。除了此前曝光的TheHole對象,Uninitialized Oddball對象的泄露同樣可導致安全問題。該方法最早出現在Issue1352549中,目前仍可用於最新版V8,谷歌尚未修復。

該方法具有較強通用性:

  1. Issue1216437(CVE-2021-30551)中首次給出了泄露internal uninitialized oddball的POC。

  2. Issue1314616(CVE-2022-1486)中也直接泄露了UninitializedOddball對象。

  3. Issue1352549(無CVE)中完整給出了利用方法。

這些案例表明,利用Sentinel value泄露可能影響多個軟件版本。

V8的大部分原生對象定義在v8/src/roots/roots.h文件中,在內存中相鄰排布。一旦這些對象泄露到JavaScript環境,就可能實現沙箱逃逸。

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

爲驗證該方法,可通過修改V8的native函數%TheHole()來泄露Uninitialized Oddball對象。

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

利用該方法可以繞過V8的HardenType保護。關鍵在於優化後的JavaScript read函數沒有充分檢查對象屬性,導致類型混淆實現任意讀寫。

獨家揭祕通過泄露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

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

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

值得注意的是,Skype等軟件可能仍存在此類漏洞。在x86平台下,由於缺少地址壓縮,任意讀寫範圍更大。攻擊者可能利用此漏洞實現完整的利用鏈。

除Uninitialized Oddball外,V8中還有多種Sentinel value可能存在類似風險。建議進一步研究其他Sentinel value泄露導致的安全問題,並考慮在模糊測試中加入相關場景。

無論該類問題是否被正式列爲安全漏洞,它都可能大幅縮短攻擊者實現完整利用的週期,值得高度重視。

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

SENC-2.41%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 轉發
  • 分享
留言
0/400
LowCapGemHuntervip
· 08-05 12:29
又挖到漏洞了 v8快来修
回復0
Degen_Whisperervip
· 08-04 10:02
啊这 谷歌咋没修 好菜啊
回復0
APY Whisperervip
· 08-04 09:59
Chrome卡到起飞 还脆皮
回復0
MidsommarWalletvip
· 08-04 09:49
又是chrome的锅= = 就这安全性?
回復0
token_therapistvip
· 08-04 09:46
没有啥杀伤力的漏洞,闲着没事
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)