createPackageContext
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
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
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-26 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-07-26 (UTC)"],[],[],null,["# createPackageContext\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\n public abstract Context createPackageContext (String packageName, int flags)\n\nThe method [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) is used when a developer wants to create\na context for another application in their own application.\n\nFor example, if developers want to get resources from a 3rd-party application or\ncall methods from it, they would use `createPackageContext`.\n\nHowever, if an application calls `createPackageContext` with the\n[`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE) flags, and then\ncalls [`getClassLoader()`](/reference/android/content/Context#getClassLoader()), this could result in making the application\nvulnerable to code execution by a malicious application. This can occur, for\nexample, when an attacker impersonates an unclaimed package name (package\nsquatting) that the developer had expected to be present on the user's device.\n\nTo summarize the criteria that have to be met to make an application vulnerable\nto this kind of attack:\n\nVulnerable App:\n\n- Calls [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) with [`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE).\n- Calls [`getClassLoader()`](/reference/android/content/Context#getClassLoader()) on the retrieved context.\n\nMalicious App:\n\n- Is able to claim the package name that the vulnerable app passes to [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)).\n- Exports android:appComponentFactory.\n\nImpact\n------\n\nWhen createPackageContext is used in an insecure way by an application, this can\nlead to a malicious application being able to gain arbitrary code execution in\nthe context of the vulnerable application.\n\nMitigations\n-----------\n\nDon't call [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) with\n[`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE) unless absolutely necessary.\n\nIn cases where this is unavoidable, make sure to implement a mechanism to verify\nthe identity of the package you are executing [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) on (e.g. by verifying the package's signature).\n\nResources\n---------\n\n- [createPackageContext Documentation](/reference/android/content/Context#createPackageContext(java.lang.String,%20int))\n- [OverSecured blog post on createPackageContext code execution](https://blog.oversecured.com/Android-arbitrary-code-execution-via-third-party-package-contexts)"]]