মুলতুবি উদ্দেশ্য প্রেরক

OWASP বিভাগ: MASVS-CODE: কোড গুণমান

ওভারভিউ

PendingIntent.getCreator*() বা PendingIntent.getTarget*() ব্যবহার করে একটি PendingIntent এর প্রেরককে বিশ্বাস করা হবে কিনা তা নির্ধারণ করার জন্য একটি শোষণের ঝুঁকি তৈরি করে।

PendingIntent.getCreator*() বা PendingIntent.getTarget*() PendingIntent এর সৃষ্টিকর্তাকে ফেরত দেয়, যা সবসময় তার প্রেরকের সাথে মেলে না। সৃষ্টিকর্তা বিশ্বস্ত হতে পারে, কিন্তু প্রেরককে কখনই বিশ্বাস করা উচিত নয়, কারণ প্রেরক একটি দূষিত অ্যাপ হতে পারে যা বিভিন্ন পদ্ধতি ব্যবহার করে অন্য অ্যাপের PendingIntent অর্জন করেছে, উদাহরণস্বরূপ:

  • NotificationListenerService থেকে
  • বৈধ ব্যবহারের ক্ষেত্রে যেগুলি দুর্বল অ্যাপের অংশ।

PendingIntent.getCreator*() বা PendingIntent.getTarget*() এর বৈধ ব্যবহারের একটি উদাহরণ হল অ্যাপটির আইকন দেখানো যা PendingIntent দ্বারা শুরু হবে।

প্রভাব

একটি PendingIntent এর প্রেরককে বিশ্বাস করা কারণ আপনি ক্রিয়েটরকে জিজ্ঞাসা করেছেন (এবং বিশ্বাস করেছেন) দুর্বলতার দিকে নিয়ে যেতে পারে। যদি একটি অ্যাপ তার স্রষ্টার উপর ভিত্তি করে PendingIntent-এর প্রেরককে বিশ্বাস করে, এবং তারপরে তার প্রমাণীকরণ বা অনুমোদনের যুক্তি শেয়ার করে, তাহলে PendingIntent-এর প্রেরক যখনই একটি দূষিত অ্যাপ হয়, এটি একটি প্রমাণীকরণ বাইপাস বা সম্ভাব্য এমনকি দূরবর্তী কোড নির্বাহের দিকে নিয়ে যাবে অবৈধ, অবিশ্বস্ত ইনপুটের উপর ভিত্তি করে , দুর্বল অ্যাপ্লিকেশনের কোড বাস্তবায়নের উপর নির্ভর করে।

প্রশমন

প্রেরক এবং সৃষ্টিকর্তার মধ্যে পার্থক্য করুন

PendingIntent পাওয়ার সময় যে কোনো ধরনের প্রমাণীকরণ বা অনুমোদনের যুক্তি অবশ্যই PendingIntent.getCreator*() বা PendingIntent.getTarget*() ব্যবহার করে চিহ্নিত PendingIntent-এর নির্মাতা সম্পর্কিত অনুমানের উপর ভিত্তি করে করা উচিত নয়।

কলকারীদের যাচাই করার বিকল্প উপায় ব্যবহার করুন

আপনার যদি কলকারীকে প্রমাণীকরণ করতে হয়, PendingIntent ব্যবহার করার পরিবর্তে, আপনার একটি পরিষেবা বা সামগ্রী সরবরাহকারী ব্যবহার করা উচিত - উভয়ই যখন আপনি একটি ইনকামিং IPC প্রেরণের প্রসঙ্গে থাকেন তখন Binder.getCallingUid() এর সাথে কলার UID আনার অনুমতি দেয়৷ UID পরে PackageManager.getPackagesForUid() ব্যবহার করে জিজ্ঞাসা করা যেতে পারে।

API স্তর 34 থেকে উপলব্ধ আরেকটি পদ্ধতি হল BroadcastReceiver.getSentFromUid() বা BroadcastReceiver.getSentFromPackage() ব্যবহার করা যদি প্রেরক BroadcastOptions.isShareIdentityEnabled() ব্যবহার করে সম্প্রচারের সময় পরিচয় শেয়ার করতে বেছে নেন।

কলিং প্যাকেজটিতে প্রত্যাশিত স্বাক্ষর আছে কিনা তা আপনার সর্বদা পরীক্ষা করা উচিত, কারণ সাইডলোড করা প্যাকেজের নাম প্লে স্টোরের সাথে ওভারল্যাপ করা যেতে পারে।

সম্পদ

,

OWASP বিভাগ: MASVS-CODE: কোড গুণমান

ওভারভিউ

PendingIntent.getCreator*() বা PendingIntent.getTarget*() ব্যবহার করে একটি PendingIntent এর প্রেরককে বিশ্বাস করা হবে কিনা তা নির্ধারণ করার জন্য একটি শোষণের ঝুঁকি তৈরি করে।

PendingIntent.getCreator*() বা PendingIntent.getTarget*() PendingIntent এর সৃষ্টিকর্তাকে ফেরত দেয়, যা সবসময় তার প্রেরকের সাথে মেলে না। সৃষ্টিকর্তা বিশ্বস্ত হতে পারে, কিন্তু প্রেরককে কখনই বিশ্বাস করা উচিত নয়, কারণ প্রেরক একটি দূষিত অ্যাপ হতে পারে যা বিভিন্ন পদ্ধতি ব্যবহার করে অন্য অ্যাপের PendingIntent অর্জন করেছে, উদাহরণস্বরূপ:

  • NotificationListenerService থেকে
  • বৈধ ব্যবহারের ক্ষেত্রে যেগুলি দুর্বল অ্যাপের অংশ।

PendingIntent.getCreator*() বা PendingIntent.getTarget*() এর বৈধ ব্যবহারের একটি উদাহরণ হল অ্যাপটির আইকন দেখানো যা PendingIntent দ্বারা শুরু হবে।

প্রভাব

একটি PendingIntent এর প্রেরককে বিশ্বাস করা কারণ আপনি ক্রিয়েটরকে জিজ্ঞাসা করেছেন (এবং বিশ্বাস করেছেন) দুর্বলতার দিকে নিয়ে যেতে পারে। যদি একটি অ্যাপ তার স্রষ্টার উপর ভিত্তি করে PendingIntent-এর প্রেরককে বিশ্বাস করে, এবং তারপরে তার প্রমাণীকরণ বা অনুমোদনের যুক্তি শেয়ার করে, তাহলে PendingIntent-এর প্রেরক যখনই একটি দূষিত অ্যাপ হয়, এটি একটি প্রমাণীকরণ বাইপাস বা সম্ভাব্য এমনকি দূরবর্তী কোড নির্বাহের দিকে নিয়ে যাবে অবৈধ, অবিশ্বস্ত ইনপুটের উপর ভিত্তি করে , দুর্বল অ্যাপ্লিকেশনের কোড বাস্তবায়নের উপর নির্ভর করে।

প্রশমন

প্রেরক এবং সৃষ্টিকর্তার মধ্যে পার্থক্য করুন

PendingIntent পাওয়ার সময় যে কোনো ধরনের প্রমাণীকরণ বা অনুমোদনের যুক্তি অবশ্যই PendingIntent.getCreator*() বা PendingIntent.getTarget*() ব্যবহার করে চিহ্নিত PendingIntent-এর নির্মাতা সম্পর্কিত অনুমানের উপর ভিত্তি করে করা উচিত নয়।

কলকারীদের যাচাই করার বিকল্প উপায় ব্যবহার করুন

আপনার যদি কলকারীকে প্রমাণীকরণ করতে হয়, PendingIntent ব্যবহার করার পরিবর্তে, আপনার একটি পরিষেবা বা সামগ্রী সরবরাহকারী ব্যবহার করা উচিত - উভয়ই যখন আপনি একটি ইনকামিং IPC প্রেরণের প্রসঙ্গে থাকেন তখন Binder.getCallingUid() এর সাথে কলার UID আনার অনুমতি দেয়৷ UID পরে PackageManager.getPackagesForUid() ব্যবহার করে জিজ্ঞাসা করা যেতে পারে।

API স্তর 34 থেকে উপলব্ধ আরেকটি পদ্ধতি হল BroadcastReceiver.getSentFromUid() বা BroadcastReceiver.getSentFromPackage() ব্যবহার করা যদি প্রেরক BroadcastOptions.isShareIdentityEnabled() ব্যবহার করে সম্প্রচারের সময় পরিচয় শেয়ার করতে বেছে নেন।

কলিং প্যাকেজটিতে প্রত্যাশিত স্বাক্ষর আছে কিনা তা আপনার সর্বদা পরীক্ষা করা উচিত, কারণ সাইডলোড করা প্যাকেজের নাম প্লে স্টোরের সাথে ওভারল্যাপ করা যেতে পারে।

সম্পদ