📢 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 作为变量加入,以挖掘其他利用原语。
无论如何,这类问题都会大大缩短黑客实现完整利用的周期。