Categoria OWASP: MASVS-CODE: Qualità del codice
Panoramica
public abstract Context createPackageContext (String packageName, int flags)
Il metodo createPackageContext
viene utilizzato quando uno sviluppatore vuole creare un contesto per un'altra applicazione nella propria applicazione.
Ad esempio, se gli sviluppatori vogliono ottenere risorse da un'applicazione di terze parti o chiamarne i metodi, devono utilizzare createPackageContext
.
Tuttavia, se un'applicazione chiama createPackageContext
con i flag CONTEXT_IGNORE_SECURITY
e CONTEXT_INCLUDE_CODE
e poi chiama getClassLoader()
, l'applicazione potrebbe essere vulnerabile all'esecuzione di codice da parte di un'applicazione dannosa. Ciò può accadere, ad esempio, quando un malintenzionato si spaccia per un nome di pacchetto non rivendicato (squattaggio del pacchetto) che lo sviluppatore si aspettava di trovare sul dispositivo dell'utente.
Per riepilogare i criteri che devono essere soddisfatti per rendere un'applicazione vulnerabile a questo tipo di attacco:
App vulnerabile:
- Chiamate a
createPackageContext
conCONTEXT_IGNORE_SECURITY
eCONTEXT_INCLUDE_CODE
. - Chiama
getClassLoader()
sul contesto recuperato.
App dannosa:
- È in grado di rivendicare il nome del pacchetto che l'app vulnerabile passa a
createPackageContext
. - Esporta android:appComponentFactory.
Impatto
Quando createPackageContext viene utilizzato in modo non sicuro da un'applicazione, questo può portare un'applicazione dannosa a ottenere l'esecuzione di codice arbitrario nel contesto dell'applicazione vulnerabile.
Mitigazioni
Non chiamare createPackageContext
con
CONTEXT_IGNORE_SECURITY
e CONTEXT_INCLUDE_CODE
, a meno che non sia assolutamente necessario.
Se ciò non è possibile, assicurati di implementare un meccanismo per verificare
l'identità del pacchetto su cui stai eseguendo createPackageContext
(ad es. verificando la firma del pacchetto).
Risorse
- Documentazione di createPackageContext
- Post del blog OverSecured sull'esecuzione di codice di createPackageContext