
PoC para CVE-2024-23700, escalada silenciosa de privilegios en Android que permite leer/escribir contactos, SMS, calendario, registro de llamadas y buzón de voz, realizar llamadas salientes o responder llamadas entrantes, manipular la configuración de llamadas, acceder y controlar las notificaciones enviadas por otras aplicaciones, controlar dispositivos cercanos, grabar audio, acceder a los identificadores del dispositivo y eludir las restricciones de segundo plano.
Proyecto que ilustra CVE-2024-23700, una vulnerabilidad de escalada de privilegios relacionada con el mecanismo Companion Device en Android. El PoC demuestra que una aplicación puede aprovechar el flujo de vinculación de dispositivos complementarios para obtener ciertos permisos sensibles sin pasar por la interacción de concesión de permisos habitual en entornos vulnerables.
La documentación y el código fuente de este repositorio tienen únicamente fines educativos, de análisis de seguridad y de pruebas en entornos autorizados. No lo utilice en dispositivos, cuentas o datos que no estén dentro del ámbito de pruebas legales.
Proyecto perteneciente a la asignatura: Seguridad en dispositivos móviles
Equipo responsable: Proyecto realizado por un equipo de 4 miembros.
| N.º | Nombre y apellidos | Código de estudiante |
|---|---|---|
| 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 |
Durante la investigación y finalización de este proyecto, el equipo realizó las siguientes tareas:
El proyecto implementa una aplicación Android que se hace pasar por una aplicación simple de notas (My Notes). Al iniciarse, la aplicación llama a CompanionDeviceManager.associate() con un perfil de dispositivo complementario para simular el proceso de toma de control mediante CVE-2024-23700. Si el dispositivo o la ROM cumplen las condiciones de explotabilidad, la aplicación puede obtener permisos sensibles adicionales y acceder a datos como contactos, SMS, registro de llamadas, calendario, notificaciones y cierta información del dispositivo.
Flujo de funcionamiento principal del PoC:
CompanionAssociationActivity simula la respuesta de aprobación de la vinculación del dispositivo.Código de la vulnerabilidad: CVE-2024-23700
Nivel de gravedad en Android: Critical
Componente relacionado: Android Companion Device Manager
Parche de referencia: Android Wear Security Bulletin 2024-05-01
Commit del parche de referencia: AOSP frameworks/base patch
Según el README original del PoC, la mayoría de dispositivos Android comunes no se ven afectados, salvo algunos casos como:
com.android.companiondevicemanager.Si el APK del PoC no se puede instalar en el dispositivo, puede ser una señal de que el dispositivo no cumple las condiciones de explotabilidad de esta vulnerabilidad.
CVE-2024-23700/
├── app/
│ ├── build.gradle - Configuración del módulo de aplicación Android
│ ├── proguard-rules.pro - Reglas de ProGuard para el módulo app
│ └── src/main/
│ ├── AndroidManifest.xml - Declaración de permisos, activities y notification listener
│ ├── java/
│ │ ├── com/android/companiondevicemanager/
│ │ │ └── CompanionAssociationActivity.java - Activity que gestiona el flujo de asociación
│ │ └── com/vsoft/mynotes/
│ │ ├── MainActivity.java - Lógica principal de la aplicación PoC
│ │ └── NotificationListener.java - Servicio de escucha de notificaciones
│ └── res/
│ ├── drawable/ - Recursos drawable de la aplicación
│ ├── drawable-v24/ - Recursos drawable para API 24+
│ ├── layout/main.xml - Interfaz de la aplicación de notas
│ ├── mipmap-*/ - Iconos de la aplicación según cada densidad de pantalla
│ └── values/ - Cadenas y tema de la aplicación
├── gradle/wrapper/ - Jar del Gradle wrapper y configuración del wrapper
├── .gitignore - Reglas de exclusión de archivos locales, salidas de compilación, logs y scripts auxiliares
├── build.gradle - Configuración de Gradle a nivel de proyecto
├── gradle.properties - Ajustes de Gradle del proyecto
├── gradlew - Script para ejecutar Gradle en Linux/macOS
├── gradlew.bat - Script para ejecutar Gradle en Windows
├── settings.gradle - Declaración del proyecto y los módulos
└── README.md
El manifest de la aplicación declara varios grupos de permisos para verificar el impacto de la vulnerabilidad en entornos vulnerables:
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, , , , Los datos enviados al servidor del laboratorio se empaquetan en formato JSON. Los principales grupos de datos son:
NotificationListener.MainActivity.java debe reemplazarse por un endpoint interno controlado por el evaluador.| Componente | Descripción | Ruta |
|---|
| MainActivity | Activity principal, muestra la interfaz de notas, llama al flujo de asociación y recopila datos cuando tiene permisos | app/src/main/java/com/vsoft/mynotes/MainActivity.java |
| CompanionAssociationActivity | Activity que simula la respuesta de asociación de Companion Device Manager | app/src/main/java/com/android/companiondevicemanager/CompanionAssociationActivity.java |
| NotificationListener | Servicio que registra las notificaciones activas y las nuevas notificaciones generadas | app/src/main/java/com/vsoft/mynotes/NotificationListener.java |
| AndroidManifest | Declaración de permisos, features, activity aliases y el servicio notification listener | 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