فئة OWASP: MASVS-CODE: جودة الرموز البرمجية
نظرة عامة
public abstract Context createPackageContext (String packageName, int flags)
تُستخدَم الطريقة createPackageContext
عندما يريد المطوِّر إنشاء
سياق لتطبيق آخر في تطبيقه الخاص.
على سبيل المثال، إذا أراد المطوّرون الحصول على موارد من تطبيق تابع لجهة خارجية أو
استدعاء طُرق منه، سيستخدمون createPackageContext
.
ومع ذلك، إذا كان أحد التطبيقات يستدعي createPackageContext
باستخدام علامتَي
CONTEXT_IGNORE_SECURITY
وCONTEXT_INCLUDE_CODE
، ثم
يُستدعي getClassLoader()
، قد يؤدي ذلك إلى جعل التطبيق
معرّضًا لخطر تنفيذ رمز برمجي من خلال تطبيق ضار. ويمكن أن يحدث ذلك، مثلاً، عندما ينتحل مهاجم هوية اسم حزمة لم يتمّ المطالبة به (تثبيت حزمة
غير شرعية) كان المطوّر يتوقع أن يكون متوفّرًا على جهاز المستخدم.
في ما يلي ملخّص للمعايير التي يجب استيفاؤها ليصبح التطبيق عرضةً لهذا النوع من الهجمات:
التطبيق الذي يتضمّن ثغرة أمنية:
- مكالمات
createPackageContext
معCONTEXT_IGNORE_SECURITY
وCONTEXT_INCLUDE_CODE
- تتصل
getClassLoader()
بالسياق الذي تم استرجاعه.
التطبيق الضار:
- أن يكون قادرًا على المطالبة باسم الحزمة الذي يرسله التطبيق المعرض للاختراق إلى
createPackageContext
- تصدير android:appComponentFactory
التأثير
عندما يستخدم تطبيق دالة createPackageContext بطريقة غير آمنة، يمكن أن يؤدي ذلك إلى تمكّن تطبيق ضار من تنفيذ رمز برمجي عشوائي في سياق التطبيق المعرّض للاختراق.
إجراءات التخفيف
لا تتصل بـ createPackageContext
باستخدام
CONTEXT_IGNORE_SECURITY
وCONTEXT_INCLUDE_CODE
ما لم يكن ذلك ضروريًا للغاية.
في الحالات التي لا يمكن فيها تجنُّب ذلك، احرص على تنفيذ آلية للتحقّق من هوية الحزمة التي يتم تنفيذ createPackageContext
عليها (على سبيل المثال، من خلال التحقّق من توقيع الحزمة).