首页
社区
课程
招聘
[原创]CVE-2019-8635:macOS double free root cause
发表于: 2019-6-30 14:11 5729

[原创]CVE-2019-8635:macOS double free root cause

2019-6-30 14:11
5729

在macOS存在一个double free漏洞,这个漏洞由AMD组件的内存损坏所引起。如果成功被利用,攻击者可以完成权限提升并且可以再root权限下执行恶意代码。

其实这个cve包含2个相似的漏洞:

下面简要介绍下这两个漏洞的成因:

第二个漏洞:
fig-1-pseudo-code-snippet-process-stretchtex2tex-function.png
如上图函数AMDRadeonX4000_AMDSIGLContext::process_StretchTex2Tex的伪代码片段。结构和上一个漏洞很类似,如果v15==0x8c00, accelResource_offset8和accelResource_offset12会从IOAccelShared2获取到,索引为共享内存+24和共享内存+28的值。最后,这个函数会从 IOAccelShared2 _rst释放accelResource_offset12, 如果 accelResource_offset8->member2!=10, 这个函数也会从IOAccelShared2释放accelResource_offset8,这样的话,如果我们设置共享内存偏移24和28的位置为相同的值,将会释放相同得对象accelResource两次,引发了漏洞。
在AMDRadeonX4000_AMDSIGLContext类里的process_StretchTex2Tex函数中,IOAccelResource2::clientRelease()将会释放这两个对象,而这两个对象accelResource2均来自accelShare2共享内存,对象通过IOAccelShared2::lookupResource函数以各自的索引值为参数来得到,这两个索引值可以被用户态通过 IOAccelContext2设置共享内存来控制。 如果用户态映射了两个相同的索引值,就会释放两次相同的对象。

接下来看IOAccelContext2::processSidebandBuffer:
fig-2-pseudo-code-snippet-ioaccelcontext2-processsideandbuffer
这两个漏洞的伪代码片段显示了共享内存指向了command stream info +24,这个command stream info buffer在IOAccelContext2::processSidebandBuffer设置,在图中,我们看到 v5=共享内存+16 ,并且v5赋值给了this->member196, this->member196也指向了commandStreamInfo+24。

ig-3-pseudo-code-snippet-ioaccelcontext2-clientmemoryfortype-function
上图是 IOAccelContext2::clientMemoryForType伪代码片段,被API IOConnectMapMemory64所调用。IOConnectMapMemory64函数可以映射用户态到内核态。当调用这个函数时,它的参数应该有连接对象,内存类型,和其他的参数。这里,我们把连接对象设置为IOAccelContext2的实例,内存类型为0,当设置了内存类型为0的时候,clientMemoryForType函数将会创建一个buffer,它的起始地址是这个变量“shareMem_start_vm_address_187”,也就是在IOAccelContext2::processSidebandBuffer命名的。
从这里开始,共享内存可以被控制,两个resource索引也可以被设置相同的,可以触发这个bug。

接下来我们看一下应用crash的backtrace信息。“AMDRadeonX4000`AMDRadeonX4000_AMDSIGLContext::process_StretchTex2Tex”和“process_StretchTex2Tex(IOAccelCommandStreamInfo&) + 2893”的偏移会有所不同,如果discard_StretchTex2Tex被用来触发漏洞,也同样可以注意到。
当内核检测到系统错误时,这个错误会在内核代码段检测到,就会抛出没有解决的处理器异常,像无效内存地址引用,或者在调用链中的bug等等,mac系统就会产生kernel panic,加入log。我们可以看到所出现的panic log.

在log中也会看到寄存器信息,$r12指向共享内存+16的位置,为0xffffff87299cb9b4,这两个resource索引都为0x42.

苹果在 macOS Mojave 10.14.4已更新补丁,此漏洞由同组研究人员发现并分析。另外,小组在广招二进制漏洞方向的实习生,简历可发我邮箱,jesse_chang#trendmicro.com 坐标:趋势科技南京,如有违规,请及时告知处理。
欢迎大家一起交流。
引用:

https://blog.trendmicro.com/trendlabs-security-intelligence/cve-2019-8635-double-free-vulnerability-in-apple-macos-lets-attackers-escalate-system-privileges-and-execute-arbitrary-code/


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 8277
活跃值: (642)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
前排围观大牛。
2019-6-30 18:08
0
游客
登录 | 注册 方可回帖
返回
//