createPackageContext
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
OWASP-Kategorie: MASVS-CODE: Codequalität
Übersicht
public abstract Context createPackageContext (String packageName, int flags)
Die Methode createPackageContext
wird verwendet, wenn ein Entwickler in seiner eigenen Anwendung einen Kontext für eine andere Anwendung erstellen möchte.
Wenn Entwickler beispielsweise Ressourcen aus einer Drittanbieteranwendung abrufen oder Methoden daraus aufrufen möchten, verwenden sie createPackageContext
.
Wenn eine Anwendung jedoch createPackageContext
mit den Flags CONTEXT_IGNORE_SECURITY
und CONTEXT_INCLUDE_CODE
aufruft und dann getClassLoader()
, kann dies dazu führen, dass die Anwendung anfällig für die Codeausführung durch eine schädliche Anwendung wird. Das kann beispielsweise passieren, wenn ein Angreifer sich als nicht beanspruchter Paketname ausgibt (Paket-Squatting), den der Entwickler auf dem Gerät des Nutzers erwartet hatte.
Hier eine Zusammenfassung der Kriterien, die erfüllt sein müssen, damit eine Anwendung für diese Art von Angriff anfällig ist:
Anfällige App:
Schädliche App:
- Kann den Paketnamen beanspruchen, den die angreifbare App an
createPackageContext
weitergibt.
- Exportiert android:appComponentFactory.
Positiv beeinflussen
Wenn „createPackageContext“ von einer Anwendung auf unsichere Weise verwendet wird, kann dies dazu führen, dass eine schädliche Anwendung im Kontext der angreifbaren Anwendung beliebigen Code ausführen kann.
Abhilfemaßnahmen
Rufen Sie createPackageContext
mit CONTEXT_IGNORE_SECURITY
und CONTEXT_INCLUDE_CODE
nur auf, wenn dies unbedingt erforderlich ist.
Wenn dies nicht möglich ist, implementieren Sie einen Mechanismus, um die Identität des Pakets zu überprüfen, auf dem Sie createPackageContext
ausführen (z.B. durch Überprüfung der Signatur des Pakets).
Ressourcen
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-26 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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)"]]