加入收藏 | 设为首页 | 会员中心 | 我要投稿 上饶站长网 (https://www.0793zz.com.cn/)- 数据库平台、视觉智能、智能搜索、决策智能、迁移!
当前位置: 首页 > 服务器 > 安全 > 正文

V8 引擎空指针利用漏洞的新型利用技术

发布时间:2021-11-14 20:48:19 所属栏目:安全 来源:互联网
导读:漏洞成因 出于代码优化方面的考虑,V8 JIT编译器使用了节点图,并通过优化管道的几个阶段减少节点图来生成优化的本机代码。而且这个节点图也适用于WASM编译器,可以将WASM代码编译为本机代码。 节点在图中使用Use结构相互链接,如下所示: 通过使用这种结构,
漏洞成因
 
出于代码优化方面的考虑,V8 JIT编译器使用了节点图,并通过优化管道的几个阶段减少节点图来生成优化的本机代码。而且这个节点图也适用于WASM编译器,可以将WASM代码编译为本机代码。
 
节点在图中使用“Use”结构相互链接,如下所示:
 
 
通过使用这种结构,节点可以指定自己的输入节点和用户节点来减少图的遍历。Use结构体重包含了用于保存多种信息的比特字段,如下所示:
 
 
InputIndex字段表示这个Use结构输入节点的索引,它可以用来定位用户节点相应的输入节点。但是,这个字段仅提供了17比特的空间来存储索引,而且没有任何代码来检测这个限制是否正常执行。因此,我们就可以使用大量输入节点来构建一个图,让这些节点指向一个单一节点,以此来引起整型溢出。比如说,0x20002表示0x2为输入节点索引。
 
Use::input_ptr和Use::from函数都使用了这个InputIndex字段来定位用户节点以及对应的输入节点。
 
 
这将导致节点、Use结构及其子字段之间出现类型混乱的情况。
 
NCSC的研究人员使用WebAssembly构建了一个PoC,并通过它来处罚空指针解引问题。WASM代码优化过程比JIT编译器的更加简单,因此控制过程与JIT编译器相比也更加难,所以它们无法避免空指针解引的情况。
 
在分析过程中,我们发现JIT代码可以让节点拥有大量输入节点:
 
 
这个函数可以帮助我们构建一个跟NCSC代码不同的PoC,并成功处罚漏洞,最终实现代码执行流的控制。
 
漏洞利用
 
虽然这个漏洞存在于V8 JIT编译器之中,但它跟其他常见的JIT编译器漏洞有很大不同。为了成功利用该漏洞,我们需要生成能够利用初始漏洞的漏洞代码,然后利用它们来实现远程代码执行。
V8 引擎空指针利用漏洞的新型利用技术

(编辑:上饶站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读