📢 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漏洞利用新方法:泄露Uninitialized Oddball实现沙箱逃逸
通过泄露Sentinel Value绕过Chrome v8 HardenProtect
前言
Sentinel value是算法中的一个特殊值,通常在循环或递归算法中作为终止条件存在。Chrome源码中有很多Sentinel value。之前有研究介绍了如何通过泄露TheHole对象实现沙箱内任意代码执行。谷歌团队随后迅速更新了相关修复。
除了TheHole对象外,v8中还有很多其他不应泄漏到JS中的原生对象。本文将讨论Uninitialized Oddball对象,该方法目前仍可用于最新版V8。值得注意的是,这种方法具有一定的通用性,曾在多个漏洞中出现。
V8中的Sentinel Value
v8的大部分原生对象定义在v8/src/roots/roots.h文件中,这些对象在内存中依次相邻排布。一旦将不应泄露的原生对象泄露到Javascript中,即可实现沙箱内任意代码执行。
为验证该方法,我们可以通过修改v8的native函数,将Uninitialized Oddball泄漏到JavaScript中。具体可以修改%TheHole()函数中相对isolate的偏移。
绕过HardenType
利用Uninitialized Oddball可以实现相对任意读写。关键在于优化后的JavaScript read函数中,只检查了obj的prop属性是否正确,但没有检查以obj.prop为key的Value,而是直接按JavaScript语义计算偏移,求取数组的数值。这导致在计算时造成类型混淆,实现任意读。
由于Uninitialized Oddball在v8内存中排序靠前且更原始,相比TheHole对象更易于伪造,是TheHole缓解绕过修复后的首选方法。
建议修复方案是在优化后的函数返回数组元素时,添加对数组map的检查,避免直接计算偏移返回数值。
PatchGap风险提示
除了关注历史漏洞,还要注意厂商在基础组件中悄悄修复的漏洞。目前Skype仍未修复该漏洞。x86和x64下利用方式略有不同,但都可实现任意读写。
这次PatchGap不仅涉及Issue1352549,新方法的公开也大大降低了类似漏洞的利用难度。黑客几乎不需研究即可完成以往任何泄露Uninitialized Oddball漏洞的完整利用。
总结
v8中还有很多其他Sentinel value,可能存在类似问题。这给我们一些启示:
其他Uninitialized Oddball泄露是否也易于实现v8 RCE。
此类问题是否应被正式视为安全问题仍存在争议。
fuzz测试时或许应考虑将各种Sentinel value作为变量加入。
无论如何,这类问题都会大大缩短黑客的完整利用周期。我们应对此保持警惕。