Chakra

作为曾经的微软主力JS引擎,Chakra在其短暂的生命周期中为我们留下了许多经典漏洞,本文我们一起来看一个Chakra引擎的JIT漏洞。
从这篇笔记开始,笔者将尝试对今年Chakra的一些漏洞补丁进行分析,尝试根据补丁复现PoC。这篇笔记选择分析的漏洞是CVE-2019-0861。
数组索引的边界检查是防止数组访问越界的有效手段。但是对数组索引的边界检查是比较耗时的,因此JIT引擎为了提高Javascript代码运行效率,对数组的边界检查在一定条件下进行了优化。
Google Project Zero团队公开了他们提交的Chakra漏洞case,笔者在调试了部分case后,把这些case按照从高向低的ID编号将分析过程逐一记录下来,与大家分享,一起学习Chakra的漏洞。
作者将要接着之前文章介绍的Chakra漏洞分析,继续深入。本期介绍的漏洞为CVE-2018-8456。
该漏洞成因在于:Interpreter在执行OP_NewScObjArray操作码指令时处理不当,在OP_NewScObjArray_Impl函数内有一个结构体之间的强制转换,导致了类型混淆,成功利用该漏洞可导致远程代码执行。