Chrome V8引擎Sentinel Value泄露的安全隱患與利用分析

robot
摘要生成中

探究Chrome V8引擎中Sentinel Value泄露導致的安全隱患

Sentinel value是算法中用作特殊標記的值,通常在循環或遞歸中作爲終止條件。Chrome V8引擎源碼中存在多個Sentinel value,其中一些不應泄露到JavaScript環境中。本文將討論通過泄露Uninitialized Oddball對象來繞過Chrome V8 HardenProtect機制的方法。

V8中的Sentinel Value

V8源碼的roots.h文件中定義了大量原生對象,它們在內存中相鄰排列。一旦這些對象被泄露到JavaScript中,就可能導致沙箱逃逸。

我們可以通過修改V8的native函數來驗證這一點。例如,修改%TheHole()函數的偏移量,使其返回Uninitialized Oddball對象而非TheHole對象。

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

繞過HardenType保護

利用Uninitialized Oddball對象可以實現相對任意的內存讀取。關鍵在於優化後的JavaScript read函數中,僅檢查了對象的prop屬性是否正確,但未檢查以obj.prop爲鍵的值。這導致了在計算過程中發生類型混淆,從而實現任意讀取。

分析優化後的匯編代碼可以看到,當傳入uninitialized_oddball時,程序會直接計算偏移並讀取數據,而不進行類型檢查。這種方法相比TheHole對象更容易構造和利用。

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

PatchGap安全警告

除了關注已知的歷史漏洞,我們還需要注意廠商在基礎組件中悄然修復的問題。經過分析,發現Skype軟件至今仍未修復該漏洞。在x86平台上,由於缺少地址壓縮,任意讀寫的範圍更大,幾乎可以讀寫整個進程空間。

這次PatchGap不僅涉及Issue1352549,還包括Issue1314616和Issue1216437等類似漏洞。新的繞過方法公開後,這些漏洞的利用難度大幅降低,攻擊者幾乎無需額外研究即可完成完整利用鏈。

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

總結

本文簡要探討了通過泄露Uninitialized Oddball實現任意讀取的方法。V8中還存在其他多個Sentinel value,它們同樣可能導致類似問題。這提示我們:

  1. 其他uninitialized_Oddball泄露可能同樣導致V8沙箱逃逸。

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

  3. 考慮在模糊測試中將Sentinel value作爲變量加入,以發現新的利用方法。

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

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

SENC0.03%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
纸手卖出惯犯vip
· 45分鐘前
脆皮V8机制 我又炸了
回復0
MoonBoi42vip
· 17小時前
有点慌 漏洞太多了捏
回復0
睡不醒的套利猫vip
· 08-02 05:40
困到只能打代码的猫猫...zZz
回復0
链上数据侦探ervip
· 08-02 05:38
卧槽v8引擎漏洞 稳了
回復0
梯子上的工具人vip
· 08-02 05:36
惊呆了 又整破解玩
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)