🎉 亲爱的广场小伙伴们,福利不停,精彩不断!目前广场上这些热门发帖赢奖活动火热进行中,发帖越多,奖励越多,快来 GET 你的专属好礼吧!🚀
🆘 #Gate 2025年中社区盛典# |广场十强内容达人评选
决战时刻到!距离【2025年中社区盛典】广场达人评选只剩 1 天,你喜爱的达人,就差你这一票冲进 C 位!在广场发帖、点赞、评论就能攒助力值,帮 Ta 上榜的同时,你自己还能抽大奖!iPhone 16 Pro Max、金牛雕塑、潮流套装、合约体验券 等你抱走!
详情 👉 https://www.gate.com/activities/community-vote
1️⃣ #晒出我的Alpha积分# |晒出 Alpha 积分&收益
Alpha 积分党集合!带话题晒出你的 Alpha 积分图、空投中奖图,即可瓜分 $200 Alpha 代币盲盒,积分最高直接抱走 $100!分享攒分秘籍 / 兑换经验,中奖率直线上升!
详情 👉 https://www.gate.com/post/status/12763074
2️⃣ #ETH百万矿王争霸赛# |ETH 链上挖矿晒收益
矿工集结!带话题晒出你的 Gate ETH 链上挖矿收益图,瓜分 $400 晒图奖池,收益榜第一独享 $200!谁才是真 ETH 矿王?开晒见分晓!
详情 👉 https://www.gate.com/pos
Chrome V8引擎新漏洞:泄露Uninitialized Oddball绕过沙箱
通过泄露Sentinel Value绕过Chrome V8 HardenProtect的内幕
前言
Sentinel value是算法中的一种特殊值,常用于循环或递归算法中作为终止条件。Chrome源码中广泛使用了这类值。近期安全研究人员发现,通过泄露TheHole对象可以实现Chrome沙箱内的任意代码执行。谷歌团队随后快速修复了这两个在野漏洞。
然而,V8中还存在其他不应泄露到JavaScript中的原生对象。本文将讨论一个新的对象:Uninitialized Oddball。这种绕过方法最早出现在Project0成员提交的Issue中,目前仍可在最新版V8中使用。
值得注意的是,这种方法具有较强的通用性:
在CVE-2021-30551中,首个POC就是泄露internal uninitialized oddball。
CVE-2022-1486的POC也直接泄露了UninitializedOddball。
一个未分配CVE的Issue同样使用了这种方法。
这些案例足以说明该问题的重要性,值得重新审视可能受影响的软件。
V8中的Sentinel Value
V8的大多数原生对象定义在v8/src/roots/roots.h文件中,它们在内存中依次相邻排布。一旦这些不应泄露的原生对象被泄露到JavaScript中,就可能导致沙箱内任意代码执行。
我们可以通过修改V8的native函数,将Uninitialized Oddball泄露到JavaScript中。具体方法是修改%TheHole()函数中相对isolate的偏移,使其返回Uninitialized Oddball。
绕过HardenType
利用Uninitialized Oddball可以实现相对任意读写。关键在于,优化后的read函数只检查了obj的prop属性,但没有检查obj.prop作为key的value。这导致在计算时发生类型混淆,从而实现任意读。
在x86架构下,由于没有地址压缩,任意读写是相对于整个进程的。虽然缺少了地址压缩带来的便利,但由于某些大型软件文件较大,仍可以较高概率读写到目标内容。
PatchGap警告
这次PatchGap不仅涉及Issue1352549,还包括类似Issue1314616和Issue1216437在内的多个漏洞。新的绕过方法公开后,这些漏洞的利用难度大幅降低。黑客几乎不需要额外研究就可以完成完整利用链。
总结
V8中还有许多其他Sentinel value,它们也可能存在类似问题。这给我们一些启示:
其他uninitialized_Oddball泄露是否也可实现V8 RCE?
这类问题是否应被正式视为安全问题?
Fuzzer测试中是否应将Sentinel value作为变量加入?
无论如何,这类问题都会大大缩短黑客实现完整利用的周期,值得我们高度重视。