原文地址

https://www.zerodayinitiative.com/blog/2018/10/24/cve-2018-4338-triggering-an-information-disclosure-on-macos-through-a-broadcom-airport-kext

前言

在用户状态下执行提升权限的代码是利用漏洞的一个关键,这个原则也同样适用于Pwn2Own入门、提交TIP或者应对一些实时的恶意软件。为了逃逸最新的沙盒,攻击者和研究人员需要了解内存的布局,否则为了找到正确的内存地址,就会随机喷堆。这是披露信息漏洞在过去几年中引起如此多关注的一个原因。虽然这个名称可能会让一些人觉得个人信息正在被泄露,但这些信息通常都是这些漏洞所针对的、关于内存布局的详细信息。

最近,向ZDI程序提交的一项报告显示了macOS如何做到只有这种类型的信息泄露漏洞。延世大学的Lee @ SECLAB报道称,该漏洞存在于处理Broadcom AirPort kext的过程中,如果您不熟悉它们,那么可以这么说,kext文件(内核扩展的简称)就是macOS的驱动程序,它就类似于Windows中的DLL。既然有了补丁,Lee的写作和分析值得仔细研究。

安装程序

这个特定漏洞仅适用于开启了Wi-Fi状态的系统,虽然这种状态在通常情况下是无处不在的,但有时它也可能会被禁用。为了解决这个问题,可以使用脚本打开Wi-Fi。攻击者可以使用dlsym功能/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211,这将产生Apple80211OpenApple80211BindToInterfaceApple80211Close功能。您可以使用以下流程触发核心功能:

漏洞

简而言之,此漏洞使得攻击者可以获取Apple OS X局部环境中的提升权限的内核地址,它的根本原因在于AirPort.BrcmNIC.kext,它不会检查输入值,并且它会导致Out Of Bounds(OOB)

发生这个错误是因为setOFFLOAD_NDP函数不检查输入值,这意味着OOB Read的堆栈值存储在ol_nd_hostip变量中,攻击者可以使用getOFFLOAD_NDP函数读取ol_nd_hostip变量。

漏洞利用

既然我们知道AirPort_BrcmNIC::setOFFLOAD_NDP函数中发生了错误,我们只需要获取存储在ol_nd_hostip变量中的值。再看一下需要删除的函数:

setOffloadNdp函数中可以看出,inp是该函数的局部变量。所述old_nd_hostip变量存储了数值高达0x40的字节,并且如果该值是0,它就可以被矫正。因此,由于返回地址是inp + 0x68,因此它可以通过运行循环七次被保存,然后,您就可以使用该getOffloadNdp函数泄漏堆栈值。

执行时,概念证明(PoC)代码应产生以下输出:

结论

如果您希望自己测试一下,PoC应该适用于macOS 10.13及之前的版本。虽然这不能用于自动执行代码,但攻击者可以利用它与其他漏洞一起在内核的中执行代码。此外,它还表明找到正确的内存位置是漏洞链的重要组成部分。

源链接

Hacking more

...