【复现】Chrome V8堆沙箱绕太过析
宣布时间 2025-04-301.研究配景
V8是Google Chrome剧本语言(JavaScript)的剖析引擎。多年来Google清静团队一直致力于提升V8的清静性,但V8误差仍层出不穷。除了经典的内存破损、运行时问题,V8优化编译器的逻辑问题转化为内存破损是V8误差中的典范。若是编译器自己就是攻击面,天生有误差的代码在所难免。通过接纳内存清静的编程语言或者硬件清静不可缓解这种问题。在这种情形下,Google清静提出V8沙箱,将V8堆生涯在1TB的沙箱内,将使用V8误差造成的破损限制在沙箱内。攻击者为了能进一步结构恣意内存读写,必需找到能绕过V8沙箱的误差。
理想情形下,V8沙箱使得浏览器纵然运行不清静的代码也不会造成攻击威胁。 然而事实并非云云。在pwn2own2024角逐中,Manfred Paul使用了一个V8中的类型混淆误差(CVE-2024-2887)控制沙箱内的内存,同时也披露了一种绕过V8沙箱的要领。尊龙凯官网入口ADLab研究职员着重剖析复现了该V8沙箱的绕过要领,并提醒Google Chrome用户实时更新浏览器,阻止受到NDay威胁。
2.V8沙箱
V8沙箱的泛起,将历程地址空间分为V8沙箱内存和V8沙箱外内存,为了避免恣意内存读写,榨取使用危险的原始指针。沙箱内的工具通过对沙箱基地址的偏移引用。如下面的ArrayBuffer的内存结构,后端存储数据的原始指针(紫色部分)由沙箱基址偏移取代:

V8外部工具(如Blink工具)通过外部索引表引用。为了控制流完整性,代码和它的元数据等危险工具也要移到沙箱外,由代码索引表以及信任表引用。信任表用于对不包括原始指针的V8工具(如Bytecode 、Code metadata)的索引,这些工具虽然不包括指针,但使用这些工具仍可能突破沙箱。V8沙箱整体的设计图如下:

V8沙箱的泛起增添了使用链的长度,一定水平上镌汰了V8误差对浏览器清静带来的攻击威胁。攻防相生相克,在pwn2own2024角逐中,Manfred Paul就使用一个整数溢出误差绕过了V8沙箱。
3.误差剖析
在沙箱泛起前,通过ArrayBuffer以及其对应的TypedArray后端存储可有用控制恣意内存读写。从上面的ArrayBuffer的内存结构可知,现在后端存储指针被替换为沙箱指针,并且长度被限制在235 ,有用阻止了使用这种要领恣意读写。
随着Resizable ArrayBuffer的泛起,对ArrayBuffer和SharedArrayBuffer以及他们的Type View的会见变得越发重大。详细来讲关于ArrayBuffer和SharedArrayBuffer的结构函数添加了maximum length,ArrayBuffer能够随时增添和缩减缓存巨细,而SharedArraybuffer能够随时增添缓存巨细。在工具建设后缓存的动态转变,致使每次会见后端缓存都要重新盘算缓存的长度。

关于类型数组的长度盘算应该采�。╞yte_length - byte_offset)/element_size , 下面是对RAB长度盘算:

相较于RAB关于byte_length和byte_offset的溢出检查,GSAB缺少整数溢出检查,在拥有沙箱内内存破损的能力下,这两个值完全可控,当byte_offset大于byte_length, 厥后端存储后的整个地址空间可控,完全突破V8沙箱,抵达沙箱外内存读写。

4.误差复现
建设GSAB (ab)工具,length为0x3000,maxByteLength为0x6000;建设类型数组Uint8Array (dv),偏移值为0x2000 ;优化func函数凭证提供的索引(i)给类型数组元素(dv[i])赋值(0x88)。
打印类型数组工具(dv)以便于审查厥后端存储指针,使用沙箱内写函数修改类型数组(dv)的偏移为0x8000(由于内存存储整数值为现实值的2倍,以是现实偏移为0x4000 )。偏移值(0x4000)大于长度(0x3000) ,导致整数溢出,当使用超大的索引(0x10000000000)越界会见后端缓存时,盘算的索引小于长度值,导致越界写。
可以看到类型数组(dv)的后端存储指针为0x316600002000:

V8沙箱的内存规模是在1TB的地址空间,程序在对0x326600002000沙箱外的不可写内存赋值(0x88)时泛起瓦解:


5.误差修复

6.误差影响
Chrome before 123.0.6312.86
[1]https://docs.google.com/document/d/1FM4fQmIhEqPG8uGp5o9A-mnPB5BOeScZYpkHjo0KKA8/edit?tab=t.0
[2]https://www.zerodayinitiative.com/blog/2024/5/2/cve-2024-2887-a-pwn2own-winning-bug-in-google-chrome
[3]https://github.com/tc39/proposal-resizablearraybuffer
[4]https://chromium-review.googlesource.com/c/v8/v8/+/5385329/4/src/compiler/graph-assembler.cc
尊龙凯官网入口起劲防御实验室(ADLab)
ADLab建设于1999年,是中国清静行业最早建设的攻防手艺研究实验室之一,微软MAPP妄想焦点成员,“黑雀攻击”看法首推者。阻止现在,ADLab已通过 CNVD/CNNVD/NVDB/CVE累计宣布清静误差6500余个,一连坚持国际网络清静领域一流水准。实验室研究偏向涵盖基础清静研究、数据清静研究、5G清静研究、AI+清静研究、卫星清静研究、运营商基础设施清静研究、移动清静研究、物联网清静研究、车联网清静研究、工控清静研究、信创清静研究、云清静研究、无线清静研究、高级威胁研究、攻防对抗手艺研究。研究效果应用于产品焦点手艺研究、国家重点科技项目攻关、专业清静服务等。



京公网安备11010802024551号