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

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

2019-6-30 14:11
6010

在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 坐标:趋势科技南京,如有违规,请及时告知处理。
欢迎大家一起交流。
引用:

604K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2N6s2u0W2L8X3c8E0K9h3y4J5L8#2)9J5k6h3y4G2L8g2)9J5c8Y4c8J5k6h3&6V1L8r3q4T1M7#2)9J5k6s2y4W2j5%4g2J5K9i4c8&6i4K6u0V1K9h3&6@1k6h3I4D9K9h3N6W2L8X3y4W2i4K6u0r3j5%4k6W2i4K6u0V1x3U0l9I4z5g2)9J5k6o6R3$3x3K6g2Q4x3X3c8V1L8%4g2T1L8r3g2Q4x3X3c8X3M7X3g2W2i4K6u0V1N6Y4g2D9L8X3g2J5j5h3u0A6L8r3W2@1P5g2)9J5k6r3W2F1i4K6u0V1j5i4m8H3L8r3g2Q4x3X3c8E0j5h3y4G2M7#2)9J5k6r3I4W2N6s2y4Q4x3X3c8S2N6s2c8S2j5$3E0W2M7Y4y4Q4x3X3c8W2M7$3y4S2L8r3q4@1k6g2)9J5k6s2y4&6M7%4c8W2L8g2)9J5k6s2m8J5K9i4k6A6L8r3g2Y4k6i4y4Q4x3X3c8S2L8X3c8Q4x3X3c8W2P5r3g2U0N6i4c8W2i4K6u0V1j5i4u0T1K9i4c8J5j5i4u0&6i4K6u0V1j5$3!0V1k6g2)9J5c8R3`.`.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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