
CVE-2024-23700のPoC。Androidのサイレント権限昇格により、連絡先、SMS、カレンダー、通話履歴、ボイスメールの読み取り/書き込み、発信または着信への応答、通話設定の操作、他のアプリが送信した通知へのアクセスと制御、近隣デバイスの制御、音声の録音、デバイス識別子へのアクセス、バックグラウンド制限のバイパスを可能にします。
このプロジェクトは、Android の Companion Device メカニズムに関連する権限昇格の脆弱性である CVE-2024-23700 を実証するものです。PoC は、影響を受ける環境において、アプリが通常の権限付与インタラクションを経由せずに、コンパニオン デバイスのペアリングフローを悪用して機密権限を取得できることを示しています。
このリポジトリ内のドキュメントとソースコードは、学習、セキュリティ分析、および許可された環境でのテストのみを目的としています。法的なテスト範囲外のデバイス、アカウント、データに対して使用しないでください。
所属科目: モバイル端末のセキュリティ
実施チーム: 4名のメンバーからなるチームが本プロジェクトを実施しました。
| 番号 | 氏名 | 学生ID |
|---|---|---|
| 1 | Đặng Quang Vinh | D54.B10.AT.024 |
| 2 | Nguyễn Khắc Hoàng Anh | D54.B10.AT.05 |
| 3 | Trần Văn Tiến | D54.B10.AT.020 |
| 4 | Nguyễn Xuân Tùng | D54.B10.AT.023 |
このプロジェクトの研究と完成にあたり、チームは以下の作業を担当しました。
このプロジェクトは、シンプルなメモアプリ(My Notes)を装った Android アプリケーションを実装しています。起動時に、CompanionDeviceManager.associate() をコンパニオン デバイスプロファイル付きで呼び出し、CVE-2024-23700 による権限取得プロセスを再現します。悪用可能な条件を満たすデバイスまたは ROM では、アプリは追加の機密権限を取得し、連絡先、SMS、通話履歴、カレンダー、通知、および一部のデバイス情報などのデータにアクセスできる可能性があります。
PoC の主な動作フロー:
CompanionAssociationActivity コンポーネントが、デバイス関連付けの承認応答を模倣します。脆弱性 ID: CVE-2024-23700
Android の深刻度: Critical
関連コンポーネント: Android Companion Device Manager
参考パッチ: Android Wear Security Bulletin 2024-05-01
参考パッチコミット: AOSP frameworks/base patch
PoC の元の README によると、通常の Android デバイスの大部分は影響を受けませんが、次のような一部のケースを除きます。
com.android.companiondevicemanager コンポーネントを削除または破損している ROM。PoC APK をデバイスにインストールできない場合、そのデバイスはこの脆弱性の影響を受ける条件を満たしていない可能性があります。
CVE-2024-23700/
├── app/
│ ├── build.gradle - Cấu hình module Android application
│ ├── proguard-rules.pro - Quy tắc ProGuard cho module app
│ └── src/main/
│ ├── AndroidManifest.xml - Khai báo quyền, activity và notification listener
│ ├── java/
│ │ ├── com/android/companiondevicemanager/
│ │ │ └── CompanionAssociationActivity.java - Activity xử lý luồng association
│ │ └── com/vsoft/mynotes/
│ │ ├── MainActivity.java - Logic chính của ứng dụng PoC
│ │ └── NotificationListener.java - Dịch vụ lắng nghe thông báo
│ └── res/
│ ├── drawable/ - Tài nguyên drawable của ứng dụng
│ ├── drawable-v24/ - Tài nguyên drawable cho API 24+
│ ├── layout/main.xml - Giao diện ứng dụng ghi chú
│ ├── mipmap-*/ - Icon ứng dụng theo từng mật độ màn hình
│ └── values/ - Chuỗi và theme ứng dụng
├── gradle/wrapper/ - Gradle wrapper jar và cấu hình wrapper
├── .gitignore - Quy tắc loại trừ file local, build output, log và script phụ trợ
├── build.gradle - Cấu hình Gradle cấp project
├── gradle.properties - Thiết lập Gradle của project
├── gradlew - Script chạy Gradle trên Linux/macOS
├── gradlew.bat - Script chạy Gradle trên Windows
├── settings.gradle - Khai báo project và module
└── README.md
アプリのマニフェストは、影響を受ける環境における脆弱性の影響を検証するために、複数の権限グループを宣言しています。
REQUEST_COMPANION_PROFILE_WATCH, REQUEST_COMPANION_PROFILE_GLASSESREQUEST_COMPANION_RUN_IN_BACKGROUND, REQUEST_COMPANION_USE_DATA_IN_BACKGROUNDREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSREAD_SMS, SEND_SMS, RECEIVE_SMS, RECEIVE_MMS, RECEIVE_WAP_PUSHREAD_PHONE_STATE, , , , ラボサーバーに送信されるデータは JSON 形式でパッケージ化されます。主なデータグループは次のとおりです。
NotificationListener によって記録された既存の通知または新しい通知。MainActivity.java 内のデータ受信エンドポイントは、テスト担当者が管理する内部エンドポイントに置き換える必要があります。| コンポーネント | 説明 | パス |
|---|
| MainActivity | メインアクティビティ。メモ UI を表示し、association フローを呼び出し、権限がある場合にデータを収集します | app/src/main/java/com/vsoft/mynotes/MainActivity.java |
| CompanionAssociationActivity | Companion Device Manager の association 応答を模倣するアクティビティ | app/src/main/java/com/android/companiondevicemanager/CompanionAssociationActivity.java |
| NotificationListener | 現在の通知と新たに発生した通知を記録するサービス | app/src/main/java/com/vsoft/mynotes/NotificationListener.java |
| AndroidManifest | 権限、機能、アクティビティエイリアス、通知リスナーサービスを宣言します | app/src/main/AndroidManifest.xml |
READ_CALL_LOGWRITE_CALL_LOGCALL_PHONEANSWER_PHONE_CALLSREAD_CALENDAR, WRITE_CALENDARPOST_NOTIFICATIONS, RECEIVE_SENSITIVE_NOTIFICATIONS, NotificationListenerServiceBLUETOOTH_SCAN, BLUETOOTH_CONNECT, BLUETOOTH_ADVERTISE, NEARBY_WIFI_DEVICES