createPackageContext

Categoría de OWASP: MASVS-CODE: Calidad de código

Descripción general

public abstract Context createPackageContext (String packageName, int flags)

El método createPackageContext se usa cuando un desarrollador quiere crear un contexto para otra aplicación en su propia aplicación.

Por ejemplo, si los desarrolladores quieren obtener recursos de una aplicación de terceros o llamar a métodos desde ella, usarán createPackageContext.

Sin embargo, si una aplicación llama a createPackageContext con las marcas CONTEXT_IGNORE_SECURITY y CONTEXT_INCLUDE_CODE y, luego, llama a getClassLoader(), es posible que la aplicación sea vulnerable a la ejecución de código por parte de una aplicación maliciosa. Esto puede ocurrir, por ejemplo, cuando un atacante suplanta la identidad de un nombre de paquete no reclamado (ocupación de paquete) que el desarrollador esperaba que estuviera presente en el dispositivo del usuario.

A continuación, se resumen los criterios que se deben cumplir para que una aplicación sea vulnerable a este tipo de ataque:

App vulnerable:

App maliciosa:

  • Puede reclamar el nombre del paquete que la app vulnerable pasa a createPackageContext.
  • Exporta android:appComponentFactory.

Impacto

Cuando una aplicación usa createPackageContext de forma no segura, puede ocurrir que una aplicación maliciosa pueda obtener la ejecución de código arbitraria en el contexto de la aplicación vulnerable.

Mitigaciones

No llames a createPackageContext con CONTEXT_IGNORE_SECURITY y CONTEXT_INCLUDE_CODE, a menos que sea absolutamente necesario.

En los casos en que esto no se pueda evitar, asegúrate de implementar un mecanismo para verificar la identidad del paquete en el que ejecutas createPackageContext (p.ej., verificando la firma del paquete).

Recursos