মুলতুবি অভিপ্রায়

OWASP বিভাগ: MASVS-প্ল্যাটফর্ম: প্ল্যাটফর্ম ইন্টারঅ্যাকশন

ওভারভিউ

একটি PendingIntent হল সিস্টেম দ্বারা রক্ষণাবেক্ষণ করা একটি টোকেনের একটি রেফারেন্স। অ্যাপ্লিকেশান A-এর পক্ষ থেকে অ্যাপ্লিকেশান B-কে পূর্বনির্ধারিত ক্রিয়া সম্পাদনের অনুমতি দেওয়ার জন্য আবেদন B-এ একটি মুলতুবি থাকা উদ্দেশ্য পাস করতে পারে; অ্যাপ্লিকেশন A এখনও জীবিত কিনা তা নির্বিশেষে।

ঝুঁকি: পরিবর্তনযোগ্য মুলতুবি উদ্দেশ্য

একটি PendingIntent পরিবর্তনযোগ্য হতে পারে, যার অর্থ হল যে অভ্যন্তরীণ অভিপ্রায় যা কর্মটি নির্দিষ্ট করে তা fillIn() ডকুমেন্টেশনে বর্ণিত যুক্তি অনুসরণ করে অ্যাপ্লিকেশন B দ্বারা আপডেট করা যেতে পারে। অন্য কথায়, একটি PendingIntent এর অপূর্ণ ক্ষেত্রগুলি একটি দূষিত অ্যাপ দ্বারা সংশোধন করা যেতে পারে এবং অন্যথায় দুর্বল অ্যাপ্লিকেশনের অ-রপ্তানিকৃত উপাদানগুলিতে অ্যাক্সেসের অনুমতি দেয়৷

প্রভাব

অ্যাপের টার্গেটেড অরপ্তানিকৃত কার্যকারিতা বাস্তবায়নের উপর নির্ভর করে এই দুর্বলতার প্রভাব পরিবর্তিত হয়।

প্রশমন

সাধারণ

সবচেয়ে খারাপ দুর্বলতা এড়াতে কর্ম, উপাদান এবং প্যাকেজ সেট করা আছে তা নিশ্চিত করুন:

কোটলিন

val intent = Intent(intentAction)

// Or other component setting APIs e.g. setComponent, setClass
intent.setClassName(packageName, className)

PendingIntent pendingIntent =
    PendingIntent.getActivity(
        context,
        /* requestCode = */ 0,
        intent, /* flags = */ PendingIntent.FLAG_IMMUTABLE
    )

জাভা

Intent intent = new Intent(intentAction);

// Or other component setting APIs e.g. setComponent, setClass
intent.setClassName(packageName, className);

PendingIntent pendingIntent =
        PendingIntent.getActivity(
            getContext(),
            /* requestCode= */ 0,
            intent, /* flags= */ 0);

পতাকা অপরিবর্তনীয়

আপনার অ্যাপ যদি Android 6 (API লেভেল 23) বা উচ্চতরকে লক্ষ্য করে, তাহলে পরিবর্তনযোগ্যতা নির্দিষ্ট করুন । উদাহরণস্বরূপ, এটি FLAG_IMMUTABLE ব্যবহার করে অসমাপ্ত ক্ষেত্রগুলিকে একটি দূষিত অ্যাপ্লিকেশন দ্বারা পূরণ করা থেকে আটকাতে পারে:

কোটলিন

val pendingIntent =
    PendingIntent.getActivity(
        context,
        /* requestCode = */ 0,
        Intent(intentAction),
        PendingIntent.FLAG_IMMUTABLE)

জাভা

PendingIntent pendingIntent =
        PendingIntent.getActivity(
            getContext(),
            /* requestCode= */ 0,
            new Intent(intentAction),
            PendingIntent.FLAG_IMMUTABLE);

অ্যান্ড্রয়েড 11 (এপিআই লেভেল 30) এবং উচ্চতর ক্ষেত্রে, আপনাকে কোন ক্ষেত্রগুলিকে পরিবর্তনযোগ্য করতে হবে তা নির্দিষ্ট করতে হবে, যা এই ধরণের দুর্ঘটনাজনিত দুর্বলতাগুলিকে প্রশমিত করে।

সম্পদ


ঝুঁকি: মুলতুবি অভিপ্রায় পুনরায় প্লে করা

FLAG_ONE_SHOT পতাকা সেট না করা পর্যন্ত একটি PendingIntent পুনরায় প্লে করা যেতে পারে৷ রিপ্লে আক্রমণ এড়াতে FLAG_ONE_SHOT ব্যবহার করা গুরুত্বপূর্ণ (যেগুলি পুনরাবৃত্তিযোগ্য হওয়া উচিত নয়)।

প্রভাব

এই দুর্বলতার প্রভাব অভিপ্রায়ের প্রাপ্তির শেষের বাস্তবায়নের উপর নির্ভর করে পরিবর্তিত হয়। FLAG_ONE_SHOT ফ্ল্যাগ সেট না করেই তৈরি করা একটি PendingIntent ব্যবহার করে একটি দূষিত অ্যাপ ক্যাপচার করতে পারে এবং পুনরায় ব্যবহার করতে পারে এমন ক্রিয়াগুলির পুনরাবৃত্তি করতে যা শুধুমাত্র একবার করা উচিত।

প্রশমন

মুলতুবি থাকা অভিপ্রায়গুলিকে একাধিকবার বরখাস্ত করার উদ্দেশ্যে নয়, রিপ্লে আক্রমণ এড়াতে FLAG_ONE_SHOT পতাকা ব্যবহার করা উচিত৷

কোটলিন

val pendingIntent =
      PendingIntent.getActivity(
          context,
          /* requestCode = */ 0,
          Intent(intentAction),
          PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_ONE_SHOT)

জাভা

PendingIntent pendingIntent =
        PendingIntent.getActivity(
            getContext(),
            /* requestCode= */ 0,
            new Intent(intentAction),
            PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT);

সম্পদ


সম্পদ

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}