APPLE MACOS内核OOB写入权限提升漏洞CVE-2020-27897的示例分析

这篇文章给大家分享的是有关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:

APPLE MACOS内核OOB写入权限提升漏洞CVE-2020-27897的示例分析

下面给出的是针对该漏洞的利用PoC:

APPLE MACOS内核OOB写入权限提升漏洞CVE-2020-27897的示例分析

总结

内核驱动程序中的漏洞总是非常的有意思,它们的攻击向量往往需要伴随远程代码执行漏洞。一旦存在这种漏洞,那么将有可能导致目标设备完全被攻击者接管。

感谢各位的阅读!关于“APPLE MACOS内核OOB写入权限提升漏洞CVE-2020-27897的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/220593.html

(0)
上一篇 2022年1月3日
下一篇 2022年1月3日

相关推荐

发表回复

登录后才能评论