دسته 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
روی آن هستید، پیاده سازی کنید (مثلاً با تأیید امضای بسته).
منابع
،دسته 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
روی آن هستید، پیاده سازی کنید (مثلاً با تأیید امضای بسته).