🎉【Gate 3000万纪念】晒出我的Gate时刻,解锁限量好礼!
Gate用户突破3000万!这不仅是数字,更是我们共同的故事。
还记得第一次开通账号的激动,抢购成功的喜悦,或陪伴你的Gate周边吗?
📸 参与 #我的Gate时刻# ,在Gate广场晒出你的故事,一起见证下一个3000万!
✅ 参与方式:
1️⃣ 带话题 #我的Gate时刻# ,发布包含Gate元素的照片或视频
2️⃣ 搭配你的Gate故事、祝福或感言更佳
3️⃣ 分享至Twitter(X)可参与浏览量前10额外奖励
推特回链请填表单:https://www.gate.com/questionnaire/6872
🎁 独家奖励:
🏆 创意大奖(3名):Gate × F1红牛联名赛车模型一辆
👕 共创纪念奖(10名): 国际米兰同款球员卫衣
🥇 参与奖(50名):Gate 品牌抱枕
📣 分享奖(10名):Twitter前10浏览量,送Gate × 国米小夜灯!
*海外用户红牛联名赛车折合为 $200 合约体验券,国米同款球衣折合为 $50 合约体验券,国米小夜灯折合为 $30 合约体验券,品牌抱枕折合为 $20 合约体验券发放
🧠 创意提示:不限元素内容风格,晒图带有如Gate logo、Gate色彩、周边产品、GT图案、活动纪念品、活动现场图等均可参与!
活动截止于7月25日 24:00 UTC+8
3
Chrome V8引擎再现安全漏洞:Sentinel Value泄露可绕过沙箱
通过泄露Sentinel Value绕过Chrome V8 HardenProtect
Sentinel value是算法中的特殊值,常用于循环或递归算法的终止条件。Chrome源码中存在多个Sentinel value。之前有研究指出如何利用TheHole对象泄露实现沙箱内任意代码执行。本文将讨论另一个V8原生对象 - Uninitialized Oddball,该方法目前仍可用于最新版V8。
这种方法具有普遍性:
Issue1216437中首先提出了泄露internal uninitialized oddball的概念。
Issue1314616中也直接泄露了UninitializedOddball,虽然当时利用方法尚不清晰。
Issue1352549值得关注其潜在影响。
目前某些软件仍未修复该漏洞。
V8中的大多数原生对象定义在v8/src/roots/roots.h文件中,这些对象在内存中相邻排布。一旦将不应泄露的原生对象暴露给JavaScript,就可能实现沙箱内任意代码执行。
为验证该方法,可以修改V8的native函数,将Uninitialized Oddball泄露到JavaScript中。具体可修改%TheHole()函数中相对isolate的偏移。
该绕过方法的核心代码如下:
javascript function read(obj, prop) { return obj[prop]; }
let uninitialized_oddball = %TheHole(); let arr = [1.1, 2.2, 3.3];
for (let i = 0; i < 100000; i++) { read(arr, 0);
}
let val = read(uninitialized_oddball, 0); console.log(val);
在V8 11.0.0中测试,当%TheHole()返回UninitializedOddball时,仍可实现相对任意读。
优化后的read函数关键汇编如下:
0x558b20004086 mov r11,rdi 0x558b20004089 movzx edi,byte ptr [r11+0xb] 0x558b2000408d cmp edi,0x81 0x558b20004093 jnz 0x558b200040d8 0x558b20004095 mov r9,qword ptr [r11+0xf] 0x558b20004099 test esi,esi 0x558b2000409b js 0x558b200040d8 0x558b2000409d movsxd r11,esi 0x558b200040a0 cmp r11,qword ptr [r9+0xf] 0x558b200040a4 jae 0x558b200040d8 0x558b200040a6 vmovsd xmm0,[r9+r11*8+0x7]
当传入uninitialized_oddball时,从0x558b20004086开始以obj为起点计算,最终在vmovsd指令中完成任意读,数据保存在xmm0寄存器中。
建议修复方法是在优化后的函数返回数组元素时,添加对数组map的检查,避免直接计算偏移返回数组值。
值得注意的是,某些软件仍未修复该漏洞。x86平台下利用方式略有不同,由于没有地址压缩,任意读写是相对于整个进程的。即使开启了ASLR,由于文件过大,仍有较大概率读写到目标内容。
这种新的绕过方法大大降低了之前类似漏洞的利用难度。建议重新审视所有泄露uninitialized_oddball的漏洞。
V8中还存在其他Sentinel value,它们同样可能导致类似问题。这给我们以下启示:
其他uninitialized_Oddball泄露是否也易于实现V8 RCE。
此类问题是否应被正式视为安全问题仍存在争议。
Fuzzer中是否应将Sentinel value作为变量加入以发掘新的利用原语。
无论如何,这类问题都会大大缩短黑客实现完整利用的周期。