
Bad Spin: Android Binder 権限昇格エクスプロイト (CVE-2022-20421)
著者: Moshe Kol
unstrusted_app からの権限昇格エクスプロイト。Android Binder の脆弱性 (CVE-2022-20421) に対するものです。この脆弱性は、2022年10月のAndroidセキュリティアップデートで修正されています。このエクスプロイトは、カーネルバージョン5.4.xおよび5.10.xを搭載したデバイスで動作し、完全なカーネルR/Wプリミティブを実現します。Google Pixel 6では、完全なroot権限とSELinuxバイパスも取得します。
詳細な解説はこちらからご覧いただけます。
src/ ディレクトリで make push と入力して libbadspin.so ライブラリをコンパイルします。これにより、ライブラリが /data/local/tmp にプッシュされます。adb shell を実行します。LD_PRELOAD=/data/local/tmp/libbadspin.so sleep 1 を実行します。これによりライブラリがロードされ、エクスプロイトが開始されます。src/ ディレクトリで make push と入力して libbadspin.so をコンパイルします。これにより、デモAndroidアプリ用の assets ディレクトリにライブラリがコピーされます。app/ ディレクトリ内のデモAndroidアプリをコンパイルします。(これにはAndroid Studioが必要な場合があります。)adb logcat -s BADSPINmake に以下の変数を渡すことができます:
VERBOSE=1: 詳細出力を有効にします。TEST_VULN=1: エクスプロイトを実行せずに脆弱性をテストします。$ make list
0: Samsung Galaxy S22, Android 12 (6/2022), kernel 5.10.81
1: Samsung Galaxy S21 Ultra, Android 12 (3/2022), kernel 5.4.129
2: Google Pixel 6, Android 12 (5/2022), kernel 5.10.66
3: Google Pixel 6, Android 13 (9/2022), kernel 5.10.107
エクスプロイトを適応させて新しいデバイスをサポートするのは難しくありません。
新しいデバイスがカーネルバージョン5.4.xまたは5.10.xを実行しており、Androidのセキュリティパッチレベルが2022年10月より前であることを確認してください。
dev_config.h にデバイスのプロパティを追加します。
2つの関数ポインタを指定します:
kimg_to_lm(): カーネルイメージの仮想ポインタを線形マッピングに変換します。find_kbase(): リークした anon_pipe_buf_ops ポインタからカーネルベースアドレスを見つけます。これには既に提供されている関数を使用できます。(ベンダーがSamsungではなく、不明な場合はPixel 6と同じ関数を使用してください。)
コンパイルして実行します。
動作した場合は、プルリクエストを送信してください。