Chrome V8引擎Sentinel Value漏洞利用分析:無需額外研究即可實現RCE

robot
摘要生成中

Chrome V8 引擎中 Sentinel Value 漏洞利用分析

Sentinel value 是算法中的一種特殊值,通常在循環或遞歸算法中作爲終止條件使用。Chrome 源碼中存在大量 Sentinel value。之前有研究表明,通過泄露 TheHole 對象可以實現 Chrome 沙箱內任意代碼執行。谷歌團隊隨後對相關漏洞進行了修復。

然而,V8 中還存在其他不應泄露到 JS 中的原生對象。本文討論的是 Uninitialized Oddball 對象,該對象泄露可導致的沙箱繞過方法目前仍可用於最新版 V8。

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

  1. CVE-2021-30551 最初的 PoC 就是泄露 internal uninitialized oddball。

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

  3. Issue1352549 (未分配 CVE) 中詳細給出了利用方法。

這些案例表明,利用 Uninitialized Oddball 泄露進行攻擊的可能性值得重視。

Sentinel Value in V8

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

爲驗證這一點,可以通過修改 V8 的 native 函數 %TheHole() 的返回值爲 Uninitialized Oddball。

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

繞過 HardenType 保護

Issue1352549 中給出了完整的繞過代碼。經簡化後的核心邏輯如下:

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

let uninitialized = %TheHole(); let arr = [1.1]; let res = read(uninitialized, 0x12345); %DebugPrint(res);

這段代碼在最新的 V8 11.0.0 版本中仍可實現相對任意讀。

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

分析優化後的 read 函數匯編代碼,可以發現它只檢查了 obj 的 prop 屬性是否正確,但沒有檢查 obj.prop 作爲 key 的 Value。這導致在計算時發生類型混淆,實現了任意讀。

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

當傳入 uninitialized_oddball 時,從特定指令開始以 obj 爲起點計算,最終在 vmovsd xmm0,[r9+r11*8+0x7] 指令中完成任意讀,數據保存在 xmm0 寄存器中。

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

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

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

PatchGap 警告

在排查可能存在 PatchGap 的軟件時發現,Skype 目前仍未修復該漏洞。在 x86 架構下,由於沒有地址壓縮,任意讀寫是直接相對於整個進程的。

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

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

這次 PatchGap 不僅涉及 Issue1352549,還導致了類似 Issue1314616 和 Issue1216437 的利用難度大幅降低。黑客幾乎不需要額外研究就可以實現以往任何泄露 uninitialized_oddball 漏洞的完整利用。

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

總結

本文介紹了通過泄露 Sentinel value 中的 uninitialized_Oddball 來實現任意讀原語的方法。V8 中還存在其他 Sentinel value,可能導致類似問題。這給我們以下啓示:

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

  2. 此類問題是否應被正式當作安全問題對待仍存在爭議。

  3. 在 fuzzer 中可考慮將 %TheHole/uninitialized_Oddball 等 Sentinel value 作爲變量加入,以挖掘其他利用原語。

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

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

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

SENC7.58%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 轉發
  • 分享
留言
0/400
CoffeeNFTradervip
· 07-22 08:13
又一个安全漏洞 慌得一批
回復0
Hash_Banditvip
· 07-21 21:23
js引擎挖矿变得真实了...利用难度已达最大
查看原文回復0
ConsensusDissentervip
· 07-20 00:25
又一个代码黑洞出来了 太恐怖了
回復0
Blockblindvip
· 07-20 00:19
v8也有这么大漏洞?笑死
回復0
区块链Talkervip
· 07-20 00:12
实际上很惊讶 V8 仍然在这方面挣扎... p.s. 我的运行时隔离在哪里,家人们?
查看原文回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)