📢 Gate廣場專屬 #WXTM创作大赛# 正式開啓!
聚焦 CandyDrop 第59期 —— MinoTari (WXTM),總獎池 70,000 枚 WXTM 等你贏!
🎯 關於 MinoTari (WXTM)
Tari 是一個以數字資產爲核心的區塊鏈協議,由 Rust 構建,致力於爲創作者提供設計全新數字體驗的平台。
通過 Tari,數字稀缺資產(如收藏品、遊戲資產等)將成爲創作者拓展商業價值的新方式。
🎨 活動時間:
2025年8月7日 17:00 - 8月12日 24:00(UTC+8)
📌 參與方式:
在 Gate廣場發布與 WXTM 或相關活動(充值 / 交易 / CandyDrop)相關的原創內容
內容不少於 100 字,形式不限(觀點分析、教程分享、圖文創意等)
添加標籤: #WXTM创作大赛# 和 #WXTM#
附本人活動截圖(如充值記錄、交易頁面或 CandyDrop 報名圖)
🏆 獎勵設置(共計 70,000 枚 WXTM):
一等獎(1名):20,000 枚 WXTM
二等獎(3名):10,000 枚 WXTM
三等獎(10名):2,000 枚 WXTM
📋 評選標準:
內容質量(主題相關、邏輯清晰、有深度)
用戶互動熱度(點讚、評論)
附帶參與截圖者優先
📄 活動說明:
內容必須原創,禁止抄襲和小號刷量行爲
獲獎用戶需完成 Gate廣場實名
Chrome V8引擎Sentinel Value漏洞利用分析:無需額外研究即可實現RCE
Chrome V8 引擎中 Sentinel Value 漏洞利用分析
Sentinel value 是算法中的一種特殊值,通常在循環或遞歸算法中作爲終止條件使用。Chrome 源碼中存在大量 Sentinel value。之前有研究表明,通過泄露 TheHole 對象可以實現 Chrome 沙箱內任意代碼執行。谷歌團隊隨後對相關漏洞進行了修復。
然而,V8 中還存在其他不應泄露到 JS 中的原生對象。本文討論的是 Uninitialized Oddball 對象,該對象泄露可導致的沙箱繞過方法目前仍可用於最新版 V8。
值得注意的是,這種方法具有一定通用性:
CVE-2021-30551 最初的 PoC 就是泄露 internal uninitialized oddball。
CVE-2022-1486 的 PoC 中也直接泄露了 UninitializedOddball。
Issue1352549 (未分配 CVE) 中詳細給出了利用方法。
這些案例表明,利用 Uninitialized Oddball 泄露進行攻擊的可能性值得重視。
Sentinel Value in V8
V8 的大部分原生對象定義在 v8/src/roots/roots.h 文件中,它們在內存中依次相鄰排布。一旦這些不應泄露的原生對象被泄露到 JavaScript 中,就可能實現沙箱內任意代碼執行。
爲驗證這一點,可以通過修改 V8 的 native 函數 %TheHole() 的返回值爲 Uninitialized Oddball。
繞過 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 版本中仍可實現相對任意讀。
分析優化後的 read 函數匯編代碼,可以發現它只檢查了 obj 的 prop 屬性是否正確,但沒有檢查 obj.prop 作爲 key 的 Value。這導致在計算時發生類型混淆,實現了任意讀。
當傳入 uninitialized_oddball 時,從特定指令開始以 obj 爲起點計算,最終在 vmovsd xmm0,[r9+r11*8+0x7] 指令中完成任意讀,數據保存在 xmm0 寄存器中。
建議的修復方法是,在優化後的函數返回數組元素時,添加對數組 map 的檢查,避免直接計算偏移返回數組數值。
PatchGap 警告
在排查可能存在 PatchGap 的軟件時發現,Skype 目前仍未修復該漏洞。在 x86 架構下,由於沒有地址壓縮,任意讀寫是直接相對於整個進程的。
雖然 Skype 開啓了 ASLR,但由於其文件較大,直接放在 4GB 內存中,攻擊者只需對某個固定地址進行讀寫,就有很大概率讀寫到 Skype 文件內容。結合 PE 解析等傳統方法,可以完成整個漏洞利用鏈。
這次 PatchGap 不僅涉及 Issue1352549,還導致了類似 Issue1314616 和 Issue1216437 的利用難度大幅降低。黑客幾乎不需要額外研究就可以實現以往任何泄露 uninitialized_oddball 漏洞的完整利用。
總結
本文介紹了通過泄露 Sentinel value 中的 uninitialized_Oddball 來實現任意讀原語的方法。V8 中還存在其他 Sentinel value,可能導致類似問題。這給我們以下啓示:
其他 uninitialized_Oddball 泄露是否也可輕鬆實現 V8 的 RCE。
此類問題是否應被正式當作安全問題對待仍存在爭議。
在 fuzzer 中可考慮將 %TheHole/uninitialized_Oddball 等 Sentinel value 作爲變量加入,以挖掘其他利用原語。
無論如何,這類問題都會大大縮短黑客實現完整利用的週期。