إنشاء حزمة سياق
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
فئة OWASP: MASVS-CODE: جودة الرموز البرمجية
نظرة عامة
public abstract Context createPackageContext (String packageName, int flags)
تُستخدَم الطريقة createPackageContext
عندما يريد المطوِّر إنشاء
سياق لتطبيق آخر في تطبيقه الخاص.
على سبيل المثال، إذا أراد المطوّرون الحصول على موارد من تطبيق تابع لجهة خارجية أو
استدعاء طُرق منه، سيستخدمون createPackageContext
.
ومع ذلك، إذا كان أحد التطبيقات يستدعي createPackageContext
باستخدام علامتَي
CONTEXT_IGNORE_SECURITY
وCONTEXT_INCLUDE_CODE
، ثم
يُستدعي getClassLoader()
، قد يؤدي ذلك إلى جعل التطبيق
معرّضًا لخطر تنفيذ رمز برمجي من خلال تطبيق ضار. ويمكن أن يحدث ذلك، مثلاً، عندما ينتحل مهاجم هوية اسم حزمة لم يتمّ المطالبة به (تثبيت حزمة
غير شرعية) كان المطوّر يتوقع أن يكون متوفّرًا على جهاز المستخدم.
في ما يلي ملخّص للمعايير التي يجب استيفاؤها ليصبح التطبيق عرضةً
لهذا النوع من الهجمات:
التطبيق الذي يتضمّن ثغرة أمنية:
التطبيق الضار:
- أن يكون قادرًا على المطالبة باسم الحزمة الذي يرسله التطبيق المعرض للاختراق إلى
createPackageContext
- تصدير android:appComponentFactory
التأثير
عندما يستخدم تطبيق دالة createPackageContext بطريقة غير آمنة، يمكن أن يؤدي ذلك
إلى تمكّن تطبيق ضار من تنفيذ رمز برمجي عشوائي في
سياق التطبيق المعرّض للاختراق.
إجراءات التخفيف
لا تتصل بـ createPackageContext
باستخدام
CONTEXT_IGNORE_SECURITY
وCONTEXT_INCLUDE_CODE
ما لم يكن ذلك ضروريًا للغاية.
في الحالات التي لا يمكن فيها تجنُّب ذلك، احرص على تنفيذ آلية للتحقّق من هوية الحزمة التي يتم تنفيذ createPackageContext
عليها (على سبيل المثال، من خلال التحقّق من توقيع الحزمة).
المراجع
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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)"]]