这篇文章给大家分享的是有关APPLE MACOS内核OOB写入权限提升漏洞CVE-2020-27897的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
仅供参考学习使用。
漏洞分析
用户空间和英特尔内核驱动程序之间的通信是使用IOConnectCallMethod完成的,而IOConnectCallMethod最终还会使用Mach消息。IntelMTRenderFunctions是一个类,它负责处理来自客户端的内核命令以便通过execute()方法来呈现UI信息。每个内核命令都由一个数值标识,在我们的例子中,我们将关注命令0x10005。除了内核命令号之外,execute()还可以接受来自客户端缓冲区的数据。此缓冲区中的偏移量用于生成结构地址的算术运算,这个运算操作会在未进行边界检查的情况下发生,并触发越界写入漏洞。
对于代码路径IntelMTLRenderFunctions::execute()的描述如下:用户空间客户端可以通过调用IOAccelSharedUserClient2::create_shmem()函数创建两个共享内存映射,该函数由另一个内核扩展IOAcceleratorFamily2提供。第一个内存映射将用作请求的分段描述符,而第二个内存映射包含一个命令缓冲区。create_shmem()函数将使用唯一的ID注册映射并返回它们,然后将这些ID与内核命令缓冲区一起传递给IOAccelCommandQueue::s_submit_command_buffers(),这个内核命令缓冲区的大致结构(数组)如下所示:
struct command { uint32_t type; uint32_t size; uint8_t *cmd; }
这个数组之后会进行分割,最终将以一个内核命令传递给IGAccelCommandQueue::processKernelCommand(),该内核命令结构如下:
struct command { uint32_t cmd_id; // 0x10005 uint32_t size; uint32_t offset; // the offset that causes no boundary check uint32_t loop_counter; uint32_t zero1; uint32_t zero2; uint32_t controlled_value; // controlled value which can be written to the offset uint32_t zero3; };
接下来,它将会传递给AppleIntelKBLGraphics中的IntelMTLRenderFunctions::execute()并处理内核命令0x10005:
下面给出的是针对该漏洞的利用PoC:
总结
内核驱动程序中的漏洞总是非常的有意思,它们的攻击向量往往需要伴随远程代码执行漏洞。一旦存在这种漏洞,那么将有可能导致目标设备完全被攻击者接管。
感谢各位的阅读!关于“APPLE MACOS内核OOB写入权限提升漏洞CVE-2020-27897的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/220593.html