createPackageContext
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
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 esempio verificando la firma del pacchetto).
Risorse
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-26 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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)"]]