本项目演示 CVE-2024-23700,这是一个与 Android 上 Companion Device 机制相关的权限提升漏洞。该 PoC 展示了应用如何利用配套设备关联流程,在易受影响的环境中无需经过常规的授权交互即可获得部分敏感权限。
本仓库中的文档和源代码仅用于学习目的、安全分析和授权环境下的测试。请勿将其用于合法测试范围之外的设备、账户或数据。
所属课程: 移动设备安全
执行小组: 本项目由 4 名成员组成的小组完成。
| 序号 | 姓名 | 学员编号 |
|---|---|---|
| 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() 并携带配套设备 profile,以模拟通过 CVE-2024-23700 进行权限接管的过程。如果设备或 ROM 满足易受利用的条件,应用可能获得额外的敏感权限,并访问通讯录、短信、通话记录、日历、通知以及部分设备信息等数据。
PoC 的主要运行流程:
CompanionAssociationActivity 组件模拟设备关联的批准响应。漏洞编号: CVE-2024-23700
Android 严重级别: Critical
相关组件: Android Companion Device Manager
参考补丁: Android Wear 安全公告 2024-05-01
参考修复提交: AOSP frameworks/base 补丁
根据 PoC 原始 README,大多数普通 Android 设备不受影响,但以下情况除外:
com.android.companiondevicemanager 组件的 ROM。如果 PoC APK 无法在设备上安装,这可能是该设备不满足此漏洞受影响条件的迹象。
CVE-2024-23700/
├── app/
│ ├── build.gradle - Android 应用模块配置
│ ├── proguard-rules.pro - app 模块的 ProGuard 规则
│ └── src/main/
│ ├── AndroidManifest.xml - 声明权限、activity 和通知监听器
│ ├── java/
│ │ ├── com/android/companiondevicemanager/
│ │ │ └── CompanionAssociationActivity.java - 处理关联流程的 Activity
│ │ └── com/vsoft/mynotes/
│ │ ├── MainActivity.java - PoC 应用的主要逻辑
│ │ └── NotificationListener.java - 通知监听服务
│ └── res/
│ ├── drawable/ - 应用的 drawable 资源
│ ├── drawable-v24/ - 适用于 API 24+ 的 drawable 资源
│ ├── layout/main.xml - 笔记应用界面
│ ├── mipmap-*/ - 各屏幕密度的应用图标
│ └── values/ - 应用字符串和主题
├── gradle/wrapper/ - Gradle wrapper jar 与 wrapper 配置
├── .gitignore - 排除本地文件、构建输出、日志和辅助脚本的规则
├── build.gradle - 项目级 Gradle 配置
├── gradle.properties - 项目 Gradle 设置
├── gradlew - 在 Linux/macOS 上运行 Gradle 的脚本
├── gradlew.bat - 在 Windows 上运行 Gradle 的脚本
├── settings.gradle - 声明项目和模块
└── README.md
应用的 Manifest 声明了多个权限组,用于在易受影响的环境中验证该漏洞的影响:
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 中接收数据的 endpoint 应替换为由测试人员控制的内部 endpoint。| 组件 | 描述 | 路径 |
|---|
| 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 | 声明权限、feature、activity 别名和通知监听服务 | 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