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_SECURITY
veCONTEXT_INCLUDE_CODE
ilecreatePackageContext
aramaları.- 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).