Chrome V8引擎Sentinel Value安全隱患分析及利用

剖析谷歌Chrome V8引擎中的Sentinel Value及其安全隱患

Sentinel value是算法中一種特殊值,常用於循環或遞歸的終止條件。Chrome源碼中包含多個Sentinel value,其中一些如果泄露到JavaScript環境中可能導致安全問題。本文將探討利用泄露的Uninitialized Oddball對象繞過Chrome V8 HardenProtect機制的方法。

V8中的Sentinel Value

V8源碼的roots.h文件定義了大量原生對象,它們在內存中依次排列。如果這些不應暴露給JavaScript的原生對象被泄露,可能導致沙箱逃逸。以往TheHole對象的泄露就是一個典型案例。

爲驗證最新版V8中的問題,可以修改%TheHole()函數,使其返回Uninitialized Oddball對象:

javascript print(%DebugPrint(%TheHole())); // 輸出:Uninitialized value

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

繞過HardenType保護

利用Uninitialized Oddball可以構造如下PoC代碼實現任意讀:

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

let uninitialized = %TheHole(); let arr = [1.1]; %PrepareFunctionForOptimization(read); read(arr, 0); read(arr, 0); %OptimizeFunctionOnNextCall(read); read(arr, 0);

print(read(uninitialized, 0x1234n));

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

反匯編優化後的read函數可以看到,它沒有嚴格檢查obj.prop的Value類型,直接按JavaScript語義計算偏移並返回數組元素,從而造成類型混淆實現任意讀。

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

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

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

PatchGap風險提示

分析發現,一些軟件如Skype可能存在PatchGap問題,尚未修復該漏洞。黑客可能利用該漏洞在短時間內完成完整的利用鏈。

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

此外,新的繞過方法公開後,一些歷史漏洞(如Issue1314616、Issue1216437)的利用難度大幅降低。建議廠商重新評估相關漏洞的安全風險。

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

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

總結

V8中還有許多其他Sentinel value值得進一步研究。建議考慮將%TheHole/Uninitialized_Oddball等作爲變量加入Fuzzer,挖掘新的利用原語。無論該類問題是否被正式列爲安全問題,它都可能大大縮短黑客的完整利用週期。

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

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

SENC10.61%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 轉發
  • 分享
留言
0/400
偏执之王vip
· 9小時前
又是一处隐患啊
回復0
WenMoon42vip
· 9小時前
又是深度研究啊
回復0
币圈柠檬精vip
· 9小時前
原来这里也有坑
回復0
ForkItAllDayvip
· 9小時前
堆栈溢出的新思路
回復0
Fren_Not_Foodvip
· 9小時前
绕过漏洞太骚了啊
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)