Chrome V8引擎Sentinel Value漏洞詳解:Uninitialized Oddball對象泄露與沙箱逃逸

解析 Chrome V8 引擎中的 Sentinel Value 漏洞

Sentinel value 是算法中的特殊值,通常用作循環或遞歸的終止條件。Chrome V8 引擎中存在多個 Sentinel value,如果泄露到 JavaScript 環境中可能導致沙箱逃逸。本文將探討通過泄露 Uninitialized Oddball 對象來繞過 Chrome V8 的 HardenProtect 保護機制。

V8 中的 Sentinel Value

V8 源碼中定義了多個原生對象,它們在內存中相鄰排布。如果這些對象被泄露到 JavaScript 中,可能導致沙箱內任意代碼執行。之前已有研究表明 TheHole 對象的泄露可以實現這一點,而本文討論的 Uninitialized Oddball 對象同樣存在這種風險。

我們可以通過修改 V8 的原生函數,將 Uninitialized Oddball 泄露到 JavaScript 中進行驗證。具體方法是修改 %TheHole() 函數中相對 isolate 的偏移,使其返回 Uninitialized Oddball 對象。

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

繞過 HardenType 保護

利用 Uninitialized Oddball 對象可以繞過 V8 的 HardenType 保護,實現相對任意讀寫。關鍵在於優化後的 JavaScript 代碼沒有檢查數組元素的類型,而是直接按 JavaScript 語義計算偏移並讀取數值,從而造成類型混淆。

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

在 x86 架構下,由於沒有地址壓縮,任意讀寫是相對於整個進程的。這意味着在某些軟件中(如 Skype),攻擊者可以利用這一點讀寫特定內存區域,進而完成整個漏洞利用鏈。

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

安全影響

該漏洞利用方法的公開,大大降低了利用類似漏洞的難度。攻擊者幾乎無需額外研究即可實現完整利用,這對許多尚未修復的軟件構成威脅。

此外,V8 中還存在其他 Sentinel value,它們同樣可能導致類似問題。這提示我們:

  1. 其他 Sentinel value 泄露是否也能輕鬆實現 V8 的遠程代碼執行?

  2. 是否應將這類問題正式列爲安全漏洞?

  3. 模糊測試中是否應考慮將各種 Sentinel value 作爲變量納入測試範圍?

無論如何,這類問題都會顯著縮短攻擊者實現完整利用的週期,值得安全研究人員和開發者高度重視。

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

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

SENC-3.77%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 7
  • 轉發
  • 分享
留言
0/400
GateUser-afe07a92vip
· 2小時前
卧槽 v8又出漏洞了
回復0
币圈相声社vip
· 08-10 04:39
这漏洞跟各大交易所趴地熊时的止损位一样虚啊
回復0
诗与远链vip
· 08-10 02:07
又又又有漏洞了
回復0
FUD Vaccinatorvip
· 08-10 02:06
又一个V8洞,铁子们冲了
回復0
瓜田李下vip
· 08-10 01:58
漏洞还挺严重啊 这波谷歌凉了
回復0
just_here_for_vibesvip
· 08-10 01:57
这bug简直炸裂...太秀了
回復0
NewPumpamentalsvip
· 08-10 01:41
又是V8的洞 老熟人了
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)