🎤 为偶像应援 · Gate送你直达 Token of Love! 🎶
家人们,现在在Gate广场为 打 Token of Love CALL,20 张音乐节门票等你来瓜分!🔥
泫雅 / SUECO / DJ KAKA / CLICK#15 —— 你最期待谁?快来一起应援吧!
📌 参与方式(任选,参与越多中奖几率越高!)
1️⃣ 本帖互动
点赞 & 转发本帖 + 投票你最爱的艺人
评论区打出 “我在 Gate 广场为 Token of Love 打 Call !”
2️⃣ 广场发帖为 TA 打 Call
带上 #歌手名字# + #TokenOfLove#
发帖内容任选:
🎵 最想现场听到的歌 + 心情宣言
📣 应援口号(例:泫雅女王冲鸭!Gate广场全员打 Call!)
😎 自制表情包/海报/短视频(加分项,更容易中奖!)
3️⃣ 推特 / 小红书发帖打 Call
同样带上 #歌手名字# + #TokenOfLove#
内容同上,记得回链到表单 👉️ https://www.gate.com/questionnaire/7008
🎟️ 奖励安排
广场优质发帖用户:8张门票
广场幸运互动用户:2张门票
Twitter 优质发帖用户:5张门票
小红书优质发帖用户:5张门票
📌 优质帖文将根据文章丰富度、热度、创意度综合评分,禁止小号水贴,原创发帖更易获奖!
🕒 8
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作为变量加入。
无论如何,这类问题都会大大缩短黑客的完整利用周期。我们应对此保持警惕。