createPackageContext
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Kategoria OWASP: MASVS-CODE: Code Quality
Omówienie
public abstract Context createPackageContext (String packageName, int flags)
Metoda createPackageContext
jest używana, gdy deweloper chce utworzyć kontekst dla innej aplikacji w ramach swojej aplikacji.
Jeśli na przykład deweloperzy chcą pobrać zasoby z aplikacji innej firmy lub wywołać w niej metody, używają do tego createPackageContext
.
Jeśli jednak aplikacja wywołuje funkcję createPackageContext
z flagami CONTEXT_IGNORE_SECURITY
i CONTEXT_INCLUDE_CODE
, a następnie wywołuje funkcję getClassLoader()
, może to spowodować, że aplikacja stanie się podatna na wykonanie kodu przez złośliwą aplikację. Może się to zdarzyć na przykład wtedy, gdy atakujący podszywa się pod nazwę nieuregulowanego pakietu (przejęcie nazwy pakietu), która według dewelopera powinna być obecna na urządzeniu użytkownika.
Oto podsumowanie kryteriów, które muszą zostać spełnione, aby aplikacja była podatna na tego typu atak:
Aplikacja podatna na zagrożenia:
Szkodliwa aplikacja:
- Może zarezerwować nazwę pakietu, którą poda aplikacja z luką.
createPackageContext
- Eksportuje android:appComponentFactory.
Wpływ
Jeśli aplikacja używa funkcji createPackageContext w niebezpieczny sposób, może to umożliwić złośliwej aplikacji wykonanie dowolnego kodu w kontekście aplikacji z luką w zabezpieczeniach.
Środki zaradcze
Nie dzwoń na numer createPackageContext
z użyciem numeru CONTEXT_IGNORE_SECURITY
i CONTEXT_INCLUDE_CODE
, chyba że jest to absolutnie konieczne.
W przypadkach, gdy jest to nieuniknione, należy wdrożyć mechanizm weryfikacji tożsamości pakietu, który jest wykonywany przez createPackageContext
(np. poprzez weryfikację podpisu pakietu).
Materiały
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-26 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 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)"]]