createPackageContext
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
OWASP kategorisi: MASVS-CODE: Kod Kalitesi
Genel Bakış
public abstract Context createPackageContext (String packageName, int flags)
createPackageContext
yöntemi, geliştirici kendi uygulamasında başka bir uygulama için bağlam oluşturmak istediğinde kullanılır.
Örneğin, geliştiriciler üçüncü taraf bir uygulamadan kaynak almak veya bu uygulamadaki yöntemleri çağırmak isterse createPackageContext
değerini kullanır.
Ancak bir uygulama CONTEXT_IGNORE_SECURITY
ve CONTEXT_INCLUDE_CODE
işaretleriyle createPackageContext
'ü, ardından getClassLoader()
'ı çağırırsa bu, uygulamanın kötü amaçlı bir uygulama tarafından kod çalıştırmaya açık hale gelmesine neden olabilir. Örneğin, bir saldırgan geliştiricinin kullanıcının cihazında bulunmasını beklediği, hak talebinde bulunulmamış bir paket adını taklit ettiğinde (paket işgalciliği) bu durumla karşılaşılabilir.
Bir uygulamanın bu tür saldırılara açık hale gelmesi için karşılanması gereken ölçütleri özetlemek gerekirse:
Güvenlik açığı olan uygulama:
Kötü Amaçlı Uygulama:
- Güvenlik açığı olan uygulamanın
createPackageContext
'a ilettiği paket adı için hak talebinde bulunabilir.
- android:appComponentFactory öğesini dışa aktarır.
Etki
createPackageContext, bir uygulama tarafından güvenli olmayan bir şekilde kullanıldığında, kötü amaçlı bir uygulamanın güvenlik açığı olan uygulama bağlamında rastgele kod yürütmesine neden olabilir.
Çözümler
Kesinlikle gerekli olmadığı sürece CONTEXT_IGNORE_SECURITY
ve CONTEXT_INCLUDE_CODE
ile createPackageContext
'ı aramayın.
Bunun kaçınılmaz olduğu durumlarda, createPackageContext
üzerinde çalıştırdığınız paketin kimliğini doğrulamak için bir mekanizma uyguladığınızdan emin olun (ör. paketin imzasını doğrulayarak).
Kaynaklar
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-26 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 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)"]]