Dynamic Code Loading Android: i rischi di DexClassLoader per le imprese
- Il Dynamic Code Loading (DCL) permette di caricare codice fuori dall'APK, ma crea vulnerabilità critiche se il percorso è scrivibile.
- DexClassLoader è lo strumento principale usato per plugin e hot-patch, ma può eseguire codice malevolo con i permessi dell'app.
- L'uso di /sdcard/ come sorgente per file .dex permette a un attaccante di sostituire il codice legittimo con un payload.
- La transizione verso lo scoped storage di Android 10 mitiga il rischio ma non elimina la vulnerabilità se l'utente concede l'accesso.

Un ricercatore di sicurezza, Niraj Kharel, analizza un caso emblematico di vulnerabilità in un'applicazione chiamata VulnLabApp. Il problema risiede in una funzione specifica: la DynamicCodeActivity. In questo scenario, l'applicazione è progettata per caricare un modulo esterno, ma commette l'errore fatale di pre-compilare il percorso del file DEX puntando a Environment.getExternalStorageDirectory() + "/plugin.dex". Per un attaccante, questo non è un semplice errore di programmazione, ma una porta aperta.
L'hacker non ha bisogno di compromettere il sistema operativo; gli basta scrivere un file nel percorso sbagliato. Se l'applicazione cerca un file in /sdcard/plugin.dex, l'attaccante può semplicemente depositare lì un proprio file payload.dex. Quando l'utente preme il tasto di attivazione nell'app, il sistema non verifica l'integrità del file, ma lo carica ed esegue il metodo run() della classe com.vulnlab.plugin.Payload. Il risultato è l'esecuzione di codice arbitrario (RCE) che gira con l'UID e tutti i permessi della vittima.
Il rischio del Dynamic Code Loading e l'impatto business
Il Dynamic Code Loading (DCL) è una tecnica che consente a un'applicazione di caricare codice eseguibile a runtime, al di fuori del pacchetto APK originale. Questa funzionalità è ampiamente utilizzata per implementare architetture a plugin, moduli di funzionalità dinamiche o framework di hot-patching, che permettono di aggiornare l'app senza richiedere un nuovo download completo dallo store. Tuttavia, come evidenziato dalla documentazione ufficiale di Android, questa pratica introduce un livello di rischio che deve essere mitigato rigorosamente.
Dal punto di vista strategico, l'adozione del DCL risponde a esigenze di agilità del business: ridurre i tempi di rilascio di nuove feature o correggere bug critici in tempo reale. Ma questa velocità ha un costo in termini di superficie di attacco. Se un malintenzionato riesce a manipolare o sostituire il codice caricato dinamicamente, può accedere a dati sensibili o eseguire azioni dannose a nome dell'utente. Google Play, infatti, segnala che molte forme di DCL, specialmente quelle che utilizzano sorgenti remote, violano le policy dello store proprio per l'impossibilità di garantire la sicurezza del codice eseguito.
DexClassLoader e l'illusione del plugin sicuro
Per implementare il caricamento dinamico, gli sviluppatori utilizzano classi come DexClassLoader, PathClassLoader o InMemoryDexClassLoader. Il DexClassLoader è particolarmente potente perché permette di specificare un percorso per il file DEX e una directory ottimizzata per il codice. L'illusione di sicurezza nasce quando lo sviluppatore assume che il percorso del plugin sia protetto o che il file caricato sia necessariamente quello originale.
L'analisi tecnica di Kharel mostra come il DexClassLoader venga istanziato partendo da un dexPath che, in molti casi, punta allo storage esterno. Questo storage è storicamente scrivibile da qualsiasi applicazione possieda il permesso WRITE_EXTERNAL_STORAGE. L'attaccante non deve fare altro che creare una classe che rispetti il nome atteso dall'app (ad esempio com.vulnlab.plugin.Payload) e implementare il metodo che l'app chiamerà. Una volta che il file è posizionato in /sdcard/, l'app lo caricherà acriticamente, eseguendo il codice malevolo all'interno del proprio processo.
Per gli imprenditori che commissionano lo sviluppo di app, questo significa che la presenza di una funzione di aggiornamento interno o di plugin non è un valore aggiunto se non è accompagnata da controlli di integrità. L'uso di DexClassLoader senza una firma digitale del codice caricato trasforma una feature di flessibilità in una vulnerabilità critica.
Perché un file .dex su sdcard prende il controllo
Il cuore del problema risiede nel modo in cui Android gestisce l'esecuzione del codice e i permessi di file system. Un file .dex (Dalvik Executable) contiene il bytecode che la macchina virtuale di Android può eseguire. Quando un'app utilizza DexClassLoader per caricare un file dalla SD card, sta essenzialmente dicendo al sistema: 'Prendi questo file esterno e integralo nel mio spazio di memoria'.
Il processo di compromissione segue una sequenza lineare:
- L'attaccante identifica l'uso di
DexClassLoadertramite decompilazione dell'APK e ricerca di stringhe specifiche (grep perDexClassLoader,PathClassLoaderoInMemoryDexClassLoader). - Viene individuato il percorso del file DEX, spesso pre-compilato in directory condivise come
/sdcard/. - L'attaccante crea un file
payload.dexcontenente una classe con lo stesso nome e metodo richiesto dall'app. - Il file viene inviato al dispositivo tramite
adb push payload.dex /sdcard/plugin.dex. - L'app viene avviata e, al trigger dell'attività, carica il payload eseguendo il codice dell'attaccante con i privilegi dell'app.
Questa vulnerabilità è classificata come un Insecure In-App Update che porta a RCE, come dettagliato nelle metodologie di pentesting di HackTricks. Il rischio è amplificato dal fatto che l'attaccante non ha bisogno di permessi di root; gli basta che l'app vittima abbia i permessi per leggere dallo storage esterno.
Gestione dei permessi tra Android 10 e direttive NIS2
L'evoluzione del sistema operativo Android ha cercato di mitigare questi rischi. A partire da Android 10, Google ha introdotto lo Scoped Storage. Questa modifica limita drasticamente la capacità delle app di scrivere in directory condivise, rendendo più difficile per un'app malevola depositare un file .dex nel percorso di un'altra app. Tuttavia, la protezione non è assoluta: se l'utente concede esplicitamente l'accesso alle directory condivise tramite le nuove API di storage, la vulnerabilità riemerge.
In un contesto di analisi per il mercato europeo, questo scenario si intreccia con la direttiva NIS2 e l'AI Act. La NIS2 impone standard di sicurezza più rigorosi per le entità essenziali e importanti, includendo la gestione della supply chain del software. Un'app aziendale che utilizza DCL insicuro rappresenta un anello debole nella catena di sicurezza. Se l'app gestisce dati critici o interfacce di controllo industriale, un'esecuzione di codice remoto via DexClassLoader potrebbe essere considerata una negligenza nella gestione del rischio informatico.
L'analisi di Niraj Kharel suggerisce che per mitigare il rischio sia necessario evitare il caricamento di codice da sorgenti non fidate. Le aziende devono implementare controlli di integrità, come la verifica della firma digitale del file DEX prima del caricamento, o preferire l'esecuzione di codice direttamente dall'APK, come raccomandato da Google.
Per le imprese italiane, l'implicazione è chiara: l'audit del codice non può limitarsi alla verifica delle funzionalità, ma deve includere il controllo di come l'app gestisce il codice dinamico. L'adozione di framework di aggiornamento non certificati o l'uso di percorsi di storage esterni per file eseguibili espone l'azienda a sanzioni e a danni reputazionali significativi.
Scenari di evoluzione e indicatori di rischio
Il futuro della sicurezza Android vedrà probabilmente una restrizione ancora più severa del DCL. Un possibile scenario è l'obbligo di firma per ogni singolo modulo caricato dinamicamente, con verifica hardware-backed. L'indicatore verificabile per questo scenario sarà l'introduzione di nuove API di verifica dell'integrità nel Play Integrity API specificamente dedicate ai moduli DCL.
Un altro scenario riguarda l'automazione della detection di queste vulnerabilità tramite AI durante la fase di submission su Google Play. L'indicatore sarà l'aumento di notifiche di 'Policy Violation' relative al Dynamic Code Loading per app che precedentemente erano state accettate senza problemi.
Implicazioni per le imprese italiane e l'UE
Per le imprese italiane, l'adozione di standard di sviluppo sicuri non è più solo una scelta tecnica, ma un requisito di compliance. Con l'entrata in vigore della NIS2, la responsabilità della sicurezza del software si estende a tutto il ciclo di vita del prodotto. L'uso di pratiche come il Dynamic Code Loading non protetto potrebbe essere interpretato come una mancanza di 'due diligence' nella protezione dei dati e dei sistemi. In un mercato UE sempre più regolamentato, la certificazione della sicurezza del codice diventa un vantaggio competitivo e una necessità legale per evitare sanzioni legate alla protezione dei dati e alla resilienza cibernetica.
Domande frequenti
Cos'è esattamente il Dynamic Code Loading (DCL)?
È una tecnica che permette a un'app Android di caricare ed eseguire codice (file .dex) che non era presente nell'APK originale al momento dell'installazione.
Perché DexClassLoader è considerato pericoloso se usato male?
Perché se l'app carica un file da un percorso scrivibile (come la SD card), un attaccante può sostituire il file legittimo con uno malevolo, ottenendo l'esecuzione di codice remoto (RCE).
Lo Scoped Storage di Android 10 risolve il problema?
Lo mitiga limitando l'accesso alle directory condivise, ma non lo risolve completamente se l'utente concede l'accesso alle cartelle o se l'app usa percorsi ancora vulnerabili.
Come possono le aziende prevenire questo rischio?
Evitando il DCL da sorgenti esterne, implementando controlli di integrità (firma digitale) sui file caricati e seguendo le linee guida di sicurezza di Google.
Fonti: Developer, Hacktricks, Nirajkharel ·
glacom · Intelligenza artificiale per aziende: i modelli girano sui tuoi server, i dati non escono →Scrivila qui: Susanna, l assistente AI di glacom, ti risponde via email con un approfondimento gratuito.
Nessuna consulenza personalizzata (finanziaria, legale o medica): solo informazione e fonti. Email usata solo per rispondere.
oppure scrivile su: WhatsApp · Telegram · SimpleX · Delta Chat · Email












