createPackageContext

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:

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