ربودن با قصد ضمنی

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

نمای کلی

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

بسته به محتوای هدف، مهاجمان می‌توانند اطلاعات حساس را بخوانند یا تغییر دهند یا با اشیاء قابل تغییر تعامل کنند، مانند PendingIntent یا Binderهای قابل تغییر .

ربودن یک هدف ضمنی همچنین می تواند به مهاجم اجازه دهد تا اقدامات دلخواه مانند راه اندازی اجزای کنترل شده توسط مهاجم را انجام دهد.

تاثیر

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

اقدامات کاهشی

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

کاتلین

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);

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

منابع