حساب‌ربایی قصد ضمنی

دسته OWASP: MASVS-PLATFORM: تعامل پلاتفرم

نمای کلی

آسیب‌پذیری سرقت هدف ضمنی زمانی رخ می‌دهد که برنامه هنگام فراخوانی هدف، نام بسته یا کلاس مؤلفه کاملاً واجدشرایط را مشخص نمی‌کند. این امر به برنامه‌های مخرب اجازه می‌دهد فیلتر قصدی را برای رهگیری قصد به‌جای برنامه موردنظر ثبت کنند.

بسته به محتوای هدف، مهاجمان می‌توانند اطلاعات حساس را بخوانند یا تغییر دهند یا با اشیای تغییرپذیر، مانند تغییرپذیر PendingIntents یا Binders تعامل داشته باشند.

ربودن قصد ضمنی همچنین می‌تواند به مهاجم اجازه دهد تا اقدامات دلخواه را انجام دهد، مانند راه‌اندازی مؤلفه‌های تحت کنترل مهاجم.

تأثیر

اگر قصد ضمنی که داده‌های حساس را مدیریت می‌کند، کد جلسه‌ای را در رشته نشانی وب اضافی برای باز کردن WebView ارسال کند، هر برنامه‌ای که فیلترهای قصد مناسب را مشخص کند می‌تواند این کد را بخواند. این امر می‌تواند به هر برنامه با پیکربندی مناسب در دستگاه اجازه دهد تا قصد را رهگیری کند و داده‌های حساس درون آن را بخواند، و به مهاجمان اجازه دهد داده‌هایی مانند اطلاعات شناساننده شخصی یا کد جلسه را استخراج کنند.

کاهش

مگراینکه برنامه به آن نیاز داشته باشد، با فراخوانی setPackage()، هدف‌ها را صریح کنید. این کار باعث می‌شود که هدف فقط توسط یک مؤلفه خاص (چه درون‌برنامه یا از برنامه‌های دیگر) تفسیر شود و از رهگیری داده‌های ارسال‌شده همراه با هدف توسط برنامه‌های غیرقابل‌اعتماد جلوگیری می‌کند. قطعه کد زیر نشان می‌دهد که چگونه می‌توان یک قصد را صریح کرد:

کاتلین

val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
    addCategory("android.intent.category.OPENABLE")
    setPackage("com.some.packagename")
    setType("*/*")
    putExtra("android.intent.extra.LOCAL_ONLY", true)
    putExtra("android.intent.extra.TITLE", "Some Title")
}
startActivity(intent)

جاوا

Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");
intent.setPackage("com.some.packagename");
intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);

اگر لازم است از هدف‌های ضمنی استفاده کنید، هرگونه اطلاعات حساس یا شیء تغییرپذیر را که نمی‌خواهید فاش شود حذف کنید. ممکن است لازم باشد از هدف‌های ضمنی زمانی استفاده شود که برنامه دقیقاً نمی‌داند کدام برنامه کنش را حل‌وفصل خواهد کرد (مثلاً نوشتن ایمیل، گرفتن عکس، و غیره).

منابع