【复现】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号