OWASP বিভাগ: MASVS-PLATFORM: প্ল্যাটফর্ম ইন্টার্যাকশন
এক নজরে
ইমপ্লিসিট ইনটেন্ট হাইজ্যাক করার দুর্বলতা তখনই দেখা যায় যখন কোনও অ্যাপ্লিকেশন ইনটেন্ট কল করার সময় সম্পূর্ণ-যোগ্য কম্পোনেন্ট ক্লাস নাম বা প্যাকেজ নির্দিষ্ট করে না। এটি কোনও ক্ষতিকারক অ্যাপ্লিকেশনকে ইনটেন্ট ফিল্টার রেজিস্টার করার অনুমতি দেয় যাতে উদ্দিষ্ট অ্যাপ্লিকেশনের পরিবর্তে ইনটেন্ট ইন্টারসেপ্ট করা যায়।
ইনটেন্ট কন্টেন্টের উপর নির্ভর করে, আক্রমণকারীরা সংবেদনশীল তথ্য পড়তে বা পরিবর্তন করতে পারে অথবা পরিবর্তনযোগ্য অবজেক্টের সাথে ইন্টার্যাক্ট করতে পারে, যেমন পরিবর্তনযোগ্য PendingIntents অথবা Binders।
ইমপ্লিসিট ইনটেন্ট হাইজ্যাক করার মাধ্যমে আক্রমণকারী ইচ্ছামতো অ্যাকশনও পারফর্ম করতে পারে, যেমন আক্রমণকারীর নিয়ন্ত্রণে থাকা কম্পোনেন্ট লঞ্চ করা।
প্রভাব
সংবেদনশীল ডেটা ম্যানেজ করে এমন কোনও ইমপ্লিসিট ইনটেন্ট যদি WebView খোলার জন্য অতিরিক্ত URL স্ট্রিংয়ের মধ্যে সেশন টোকেন পাস করে, তাহলে সঠিক ইনটেন্ট ফিল্টার নির্দিষ্ট করে এমন যেকোনও অ্যাপ্লিকেশন এই টোকেন পড়তে পারে। এটি ডিভাইসে সঠিকভাবে কনফিগার করা যেকোনও অ্যাপ্লিকেশনকে ইনটেন্ট ইন্টারসেপ্ট করতে এবং এর মধ্যে থাকা সংবেদনশীল ডেটা পড়তে দেয়, যা আক্রমণকারীদের PII বা সেশন টোকেনের মতো ডেটা এক্সফিল্ট্রেট করার অনুমতি দেয়।
মিটিগেশন
অ্যাপ্লিকেশনের প্রয়োজন না হলে, setPackage() কল করে ইন্টেন্টকে এক্সপ্লিসিট করুন। এটি শুধুমাত্র একটি নির্দিষ্ট কম্পোনেন্ট (অ্যাপ-মধ্যস্থ বা অন্য অ্যাপ্লিকেশন থেকে) দ্বারা ইনটেন্ট ব্যাখ্যা করার অনুমতি দেয়,
যা অবিশ্বস্ত অ্যাপ্লিকেশনগুলিকে ইনটেন্টের সাথে পাঠানো ডেটা ইন্টারসেপ্ট করা থেকে আটকায়। নিম্নলিখিত
স্নিপেট থেকে বোঝা যায় যে কীভাবে ইনটেন্টকে স্পষ্ট করতে হয়:
Kotlin
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);
আপনাকে ইমপ্লিসিট ইনটেন্ট ব্যবহার করতে হলে, সংবেদনশীল তথ্য বা পরিবর্তনযোগ্য অবজেক্ট বাদ দিন যা আপনি প্রকাশ করতে চান না। ইমপ্লিসিট ইনটেন্ট ব্যবহার করার প্রয়োজন হতে পারে যখন কোনও অ্যাপের কাছে সঠিক তথ্য থাকে না যে কোন অ্যাপ অ্যাকশনটি সমাধান করবে (যেমন, ইমেল কম্পোজ করা, ছবি তোলা ইত্যাদি)।
রিসোর্স
- ম্যানিফেস্ট ইনটেন্ট-ফিল্টার এলিমেন্ট
- বিশেষ অধিকারপ্রাপ্ত অনুমতির সাদাতালিকা তৈরি করা
- ইনটেন্ট ও ইনটেন্ট ফিল্টার
- ইমপ্লিসিট ইনটেন্টের জন্য বেছে নেওয়ার বিকল্প জোর করে দেখানো
- সাধারণ ইমপ্লিসিট ইনটেন্ট