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:
CONTEXT_IGNORE_SECURITYveCONTEXT_INCLUDE_CODEilecreatePackageContextaramaları.- Alınan bağlamda
getClassLoader()çağrısı yapar.
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).