
CVE-2024-23700에 대한 PoC, Android 은밀한 권한 상승으로 연락처, SMS, 캘린더, 통화 기록 및 음성 사서함 읽기/쓰기, 발신 전화 걸기 또는 수신 전화 받기, 통화 설정 조작, 다른 앱이 보낸 알림 접근 및 제어, 주변 기기 제어, 오디오 녹음, 기기 식별자 접근 및 백그라운드 제한 우회를 허용합니다.
이 프로젝트는 Android의 Companion Device 메커니즘과 관련된 권한 상승 취약점인 CVE-2024-23700을 시연합니다. PoC는 취약한 환경에서 앱이 일반적인 권한 부여 상호 작용을 거치지 않고 일부 민감한 권한을 얻기 위해 Companion Device 연결 흐름을 악용할 수 있음을 보여줍니다.
이 저장소의 문서와 소스 코드는 학습, 보안 분석 및 허가된 환경에서의 테스트 목적으로만 사용됩니다. 합법적인 테스트 범위에 속하지 않는 장치, 계정 또는 데이터에는 사용하지 마십시오.
과목: 모바일 기기 보안
수행 팀: 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 앱을 구현합니다. 실행 시 앱은 Companion Device 프로필과 함께 CompanionDeviceManager.associate()를 호출하여 CVE-2024-23700을 통한 권한 탈취 과정을 시뮬레이션합니다. 장치 또는 ROM이 취약한 조건을 충족하면 앱은 추가 민감 권한을 얻고 연락처, SMS, 통화 기록, 캘린더, 알림 및 일부 장치 정보와 같은 데이터에 액세스할 수 있습니다.
PoC의 주요 작동 흐름:
CompanionAssociationActivity 구성 요소가 장치 연결 승인 응답을 시뮬레이션합니다.취약점 코드: 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 | 메인 Activity, 메모 인터페이스 표시, 연결 흐름 호출 및 권한이 있을 때 데이터 수집 | app/src/main/java/com/vsoft/mynotes/MainActivity.java |
| CompanionAssociationActivity | Companion Device Manager의 연결 응답을 시뮬레이션하는 Activity | app/src/main/java/com/android/companiondevicemanager/CompanionAssociationActivity.java |
| NotificationListener | 활성 알림 및 새로 생성된 알림을 기록하는 서비스 | app/src/main/java/com/vsoft/mynotes/NotificationListener.java |
| AndroidManifest | 권한, 기능, activity alias 및 알림 리스너 서비스 선언 | 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