
Preuve de concept pour CVE-2024-23700, élévation de privilèges silencieuse sous Android permettant de lire/écrire les contacts, SMS, calendrier, journal d'appels et messagerie vocale, passer des appels sortants ou répondre aux appels entrants, manipuler les paramètres d'appel, accéder et contrôler les notifications envoyées par d'autres applications, contrôler les appareils à proximité, enregistrer l'audio, accéder aux identifiants de l'appareil et contourner la restriction d'arrière-plan.
Ce projet illustre CVE-2024-23700, une vulnérabilité d'élévation de privilèges liée au mécanisme Companion Device sous Android. La preuve de concept montre qu'une application peut exploiter le flux d'association d'appareil compagnon pour obtenir certaines autorisations sensibles sans passer par l'interaction d'autorisation habituelle dans les environnements vulnérables.
La documentation et le code source de ce dépôt sont uniquement destinés à des fins d'apprentissage, d'analyse de sécurité et de tests dans un environnement autorisé. Ne pas les utiliser sur des appareils, comptes ou données ne faisant pas partie d'un test légitime.
Matière du projet: Sécurité sur les appareils mobiles
Équipe de réalisation: Projet réalisé par une équipe de 4 membres.
| N° | Nom et prénom | Code étudiant |
|---|---|---|
| 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 |
Au cours de la recherche et de la finalisation de ce projet, l'équipe a effectué les tâches suivantes:
Le projet déploie une application Android se faisant passer pour une simple application de notes (My Notes). Au démarrage, l'application appelle CompanionDeviceManager.associate() avec un profil d'appareil compagnon pour simuler le processus de prise de contrôle via CVE-2024-23700. Si l'appareil ou le ROM répond aux conditions de vulnérabilité, l'application peut obtenir des autorisations sensibles supplémentaires et accéder à des données telles que les contacts, SMS, journal d'appels, calendrier, notifications et certaines informations sur l'appareil.
Flux de fonctionnement principal de la preuve de concept:
CompanionAssociationActivity simule la réponse d'approbation de l'association.Code de la vulnérabilité : CVE-2024-23700
Gravité Android : Critique
Composant concerné : Android Companion Device Manager
Correctif de référence : Android Wear Security Bulletin 2024-05-01
Commit de correctif de référence : AOSP frameworks/base patch
Selon le README original de la preuve de concept, la plupart des appareils Android classiques ne sont pas affectés, à l'exception de certains cas tels que :
com.android.companiondevicemanager.Si l'APK de la preuve de concept ne peut pas être installé sur l'appareil, cela peut être un signe que l'appareil ne remplit pas les conditions de vulnérabilité de cette faille.
CVE-2024-23700/
├── app/
│ ├── build.gradle - Configuration du module d'application Android
│ ├── proguard-rules.pro - Règles ProGuard pour le module app
│ └── src/main/
│ ├── AndroidManifest.xml - Déclaration des autorisations, activités et écouteur de notifications
│ ├── java/
│ │ ├── com/android/companiondevicemanager/
│ │ │ └── CompanionAssociationActivity.java - Activité gérant le flux d'association
│ │ └── com/vsoft/mynotes/
│ │ ├── MainActivity.java - Logique principale de l'application de preuve de concept
│ │ └── NotificationListener.java - Service d'écoute des notifications
│ └── res/
│ ├── drawable/ - Ressources drawable de l'application
│ ├── drawable-v24/ - Ressources drawable pour API 24+
│ ├── layout/main.xml - Interface de l'application de notes
│ ├── mipmap-*/ - Icônes de l'application selon la densité d'écran
│ └── values/ - Chaînes et thème de l'application
├── gradle/wrapper/ - Jar du wrapper Gradle et configuration du wrapper
├── .gitignore - Règles d'exclusion des fichiers locaux, sorties de build, logs et scripts auxiliaires
├── build.gradle - Configuration Gradle au niveau du projet
├── gradle.properties - Paramètres Gradle du projet
├── gradlew - Script pour exécuter Gradle sur Linux/macOS
├── gradlew.bat - Script pour exécuter Gradle sur Windows
├── settings.gradle - Déclaration du projet et des modules
└── README.md
Le manifeste de l'application déclare plusieurs groupes d'autorisations pour vérifier l'impact de la vulnérabilité dans un environnement vulnérable :
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, , , , Les données envoyées au serveur de laboratoire sont emballées au format JSON. Les principaux groupes de données sont les suivants :
NotificationListener.MainActivity.java doit être remplacé par un point de terminaison interne contrôlé par le testeur.| Composant | Description | Chemin |
|---|
| MainActivity | Activité principale, affichant l'interface de notes, appelant le flux d'association et collectant les données lorsqu'autorisé | app/src/main/java/com/vsoft/mynotes/MainActivity.java |
| CompanionAssociationActivity | Activité simulant la réponse d'association du Companion Device Manager | app/src/main/java/com/android/companiondevicemanager/CompanionAssociationActivity.java |
| NotificationListener | Service enregistrant les notifications actives et les nouvelles notifications | app/src/main/java/com/vsoft/mynotes/NotificationListener.java |
| AndroidManifest | Déclaration des autorisations, fonctionnalités, alias d'activité et service d'écoute de notifications | 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