OWASP বিভাগ: MASVS-PLATFORM: প্ল্যাটফর্ম মিথস্ক্রিয়া
সংক্ষিপ্ত বিবরণ
অ্যান্ড্রয়েড অ্যাপ এবং অ্যান্ড্রয়েড সিস্টেম, অন্যান্য অ্যাপকে তাদের আগ্রহের ইভেন্ট সম্পর্কে অবহিত করার জন্য একটি মেসেজিং সিস্টেম হিসেবে ব্রডকাস্ট ব্যবহার করতে পারে। স্টিকি ব্রডকাস্ট হলো এক বিশেষ ধরনের ব্রডকাস্ট, যেখানে পাঠানো ইন্টেন্ট অবজেক্ট(গুলো) ব্রডকাস্ট শেষ হওয়ার পরেও ক্যাশে থেকে যায়। সিস্টেমটি প্রাপকদের পরবর্তী রেজিস্ট্রেশনের জন্য স্টিকি ইন্টেন্টগুলো পুনরায় ব্রডকাস্ট করতে পারে। দুর্ভাগ্যবশত, স্টিকি ব্রডকাস্ট এপিআই-তে বেশ কিছু নিরাপত্তা-সংক্রান্ত ত্রুটি রয়েছে, যে কারণে অ্যান্ড্রয়েড ৫.০ (এপিআই লেভেল ২১)-এ এটিকে ডেপ্রিকেটেড করা হয়েছিল।
যে কেউ স্টিকি সম্প্রচারগুলি অ্যাক্সেস করতে পারে
স্টিকি ব্রডকাস্টকে নির্দিষ্ট অনুমতিধারী রিসিভারদের মধ্যে সীমাবদ্ধ করা যায় না। তাই, সংবেদনশীল তথ্য সম্প্রচারের জন্য এগুলো উপযুক্ত নয়। এটা মনে হতে পারে যে, ব্রডকাস্ট Intent অ্যাপ্লিকেশন প্যাকেজের নাম উল্লেখ করলে BroadcastReceivers সেট সীমিত হয়ে যায়:
কোটলিন
val intent = Intent("com.example.NOTIFY").apply {
setPackage("com.example.myapp")
}
applicationContext.sendBroadcast(intent)
জাভা
Intent intent = new Intent("com.example.NOTIFY");
intent.setPackage("com.example.myapp");
getApplicationContext().sendBroadcast(intent);
উদাহরণটিতে, ব্রডকাস্ট পাঠানোর সময় শুধুমাত্র com.example.myapp প্যাকেজের রিসিভাররাই ইন্টেন্টটি গ্রহণ করে। তবে, স্টিকি ক্যাশ থেকে ইন্টেন্টটি পুনরায় ব্রডকাস্ট করার সময় প্যাকেজ নামের ফিল্টারটি প্রয়োগ করা হয় না। registerReceiver() মেথড ব্যবহার করে কোনো রিসিভার রেজিস্টার করার সময়, রিসিভারটি কোন প্যাকেজ নামে রয়েছে তা নির্বিশেষে, স্টিকি ক্যাশে থাকা নির্দিষ্ট ফিল্টারের সাথে মিলে যাওয়া সমস্ত ইন্টেন্ট সেই রিসিভারের কাছে পুনরায় ব্রডকাস্ট করা হয়।
যে কেউ স্টিকি ব্রডকাস্ট পাঠাতে পারে
স্টিকি ব্রডকাস্ট পাঠানোর জন্য একটি অ্যাপের শুধুমাত্র android.permission.BROADCAST_STICKY পারমিশনটি প্রয়োজন, যা অ্যাপটি ইনস্টল করার সময় স্বয়ংক্রিয়ভাবে মঞ্জুর করা হয়। তাই, আক্রমণকারীরা যেকোনো রিসিভারের কাছে যেকোনো ইন্টেন্ট পাঠাতে পারে, যার মাধ্যমে তারা অন্য কোনো অ্যাপে অননুমোদিত অ্যাক্সেস লাভ করতে পারে। ব্রডকাস্ট রিসিভাররা প্রেরকদের একটি নির্দিষ্ট পারমিশনধারীদের মধ্যে সীমাবদ্ধ রাখতে পারে। তবে, এমনটা করলে রিসিভার স্টিকি ক্যাশে থেকে ব্রডকাস্ট গ্রহণ করতে পারে না, কারণ সেগুলো কোনো অ্যাপের পরিচয়ের প্রেক্ষাপটে পাঠানো হয় না এবং কোনো পারমিশন ছাড়াই ব্রডকাস্ট করা হয়।
যে কেউ স্টিকি ব্রডকাস্ট পরিবর্তন করতে পারে
যখন কোনো ইন্টেন্ট একটি স্টিকি ব্রডকাস্টের অংশ হয়, তখন সেই ইন্টেন্টটি স্টিকি ক্যাশে থাকা একই অ্যাকশন, ডেটা, টাইপ, আইডেন্টিফায়ার, ক্লাস এবং ক্যাটাগরিযুক্ত পূর্ববর্তী যেকোনো ইনস্ট্যান্সকে প্রতিস্থাপন করে। সুতরাং, একজন আক্রমণকারী খুব সহজেই একটি বৈধ অ্যাপের স্টিকি ইন্টেন্টের অতিরিক্ত ডেটা ওভাররাইট করে দিতে পারে, যা পরবর্তীতে অন্যান্য প্রাপকদের কাছে পুনরায় ব্রডকাস্ট হতে পারে।
sendStickyOrderedBroadcast() ` মেথড ব্যবহার করে পাঠানো ব্রডকাস্টগুলো একবারে একটি রিসিভারের কাছে পৌঁছে দেওয়া হয়, যাতে উচ্চ অগ্রাধিকারের রিসিভাররা নিম্ন অগ্রাধিকারের রিসিভারদের কাছে পৌঁছানোর আগে ব্রডকাস্টটি গ্রহণ করতে পারে। প্রতিটি রিসিভার যখন পর্যায়ক্রমে কাজ করে, তখন এটি setResultData() কল করার মতো কোনো উপায়ে পরবর্তী রিসিভারের কাছে ফলাফলটি পাঠাতে পারে, অথবা ব্রডকাস্টটি বাতিল করে দিতে পারে, যার ফলে পরবর্তী রিসিভাররা ব্রডকাস্টটি গ্রহণ করতে পারে না। কোনো আক্রমণকারী যদি একটি বৈধ অ্যাপ থেকে স্টিকি অর্ডারড ব্রডকাস্ট গ্রহণ করতে পারে, তবে সে ব্রডকাস্টের ফলাফলের ডেটা পরিবর্তন করতে বা ব্রডকাস্টগুলো সম্পূর্ণরূপে বাদ দিতে একটি উচ্চ-অগ্রাধিকারের রিসিভার তৈরি করতে পারে।
প্রভাব
স্টিকি ব্রডকাস্ট কীভাবে ব্যবহার করা হচ্ছে এবং ব্রডকাস্ট রিসিভারদের কাছে কী ডেটা পাঠানো হচ্ছে, তার ওপর এর প্রভাব নির্ভর করে। সাধারণভাবে বলতে গেলে, স্টিকি ব্রডকাস্টের ব্যবহারের ফলে সংবেদনশীল ডেটা ফাঁস, ডেটার বিকৃতি, অন্য কোনো অ্যাপে অননুমোদিতভাবে কোনো কার্যক্রম চালানোর সুযোগ এবং ডিনায়াল অফ সার্ভিস (পরিষেবা প্রদানে বাধা) ঘটতে পারে।
প্রশমন
স্টিকি ব্রডকাস্ট ব্যবহার করা উচিত নয়। প্রস্তাবিত পদ্ধতি হলো, যখনই প্রয়োজন তখনই বর্তমান মানটি পাওয়ার জন্য লোকাল ডেটাবেসের মতো অন্য কোনো ব্যবস্থার সাথে নন-স্টিকি ব্রডকাস্ট ব্যবহার করা।
ডেভেলপাররা পারমিশন ব্যবহার করে অথবা ইন্টেন্টে অ্যাপ্লিকেশন প্যাকেজ নেম সেট করার মাধ্যমে নিয়ন্ত্রণ করতে পারেন যে কারা নন-স্টিকি ব্রডকাস্ট গ্রহণ করতে পারবে। এছাড়াও, যদি কোনো ব্রডকাস্ট অ্যাপের বাইরের কম্পোনেন্টগুলোতে পাঠানোর প্রয়োজন না হয়, তবে LiveData ব্যবহার করুন, যা অবজারভার প্যাটার্ন প্রয়োগ করে।
সম্প্রচার সুরক্ষিত করার বিষয়ে আরও তথ্য সম্প্রচার ওভারভিউ পৃষ্ঠায় পাওয়া যাবে।