createPackageContext (יצירת חבילה)
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
קטגוריה ב-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 (שעון UTC).
[[["התוכן קל להבנה","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 (שעון 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)"]]