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