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