মুলতুবি অভিপ্রায়
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
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 %}
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[],null,["# Pending intents\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-PLATFORM: Platform Interaction](https://mas.owasp.org/MASVS/09-MASVS-PLATFORM)\n\n\nOverview\n--------\n\nA [`PendingIntent`](/reference/android/app/PendingIntent) is a reference to a token maintained by the system. Application A can pass a PendingIntent to application B in order to allow application B to execute predefined actions on behalf of application A; regardless of whether application A is still alive.\n\nRisk: Mutable Pending Intents\n-----------------------------\n\nA PendingIntent can be mutable, which means that the inner intent that specifies the action can be updated by application B following the logic described in the [`fillIn()`](/reference/android/content/Intent#fillIn(android.content.Intent,%20int)) documentation. In other words, the unfilled fields of a PendingIntent can be modified by a malicious app and allow access to otherwise non-exported components of the vulnerable application.\n\n### Impact\n\nThe impact of this vulnerability varies depending on the implementation of the targeted unexported functionality of the app.\n\n### Mitigations\n\n#### General\n\nMake sure action, component, and package are set to avoid the worst vulnerabilities: \n\n### Kotlin\n\n val intent = Intent(intentAction)\n\n // Or other component setting APIs e.g. setComponent, setClass\n intent.setClassName(packageName, className)\n\n PendingIntent pendingIntent =\n PendingIntent.getActivity(\n context,\n /* requestCode = */ 0,\n intent, /* flags = */ PendingIntent.FLAG_IMMUTABLE\n )\n\n### Java\n\n Intent intent = new Intent(intentAction);\n\n // Or other component setting APIs e.g. setComponent, setClass\n intent.setClassName(packageName, className);\n\n PendingIntent pendingIntent =\n PendingIntent.getActivity(\n getContext(),\n /* requestCode= */ 0,\n intent, /* flags= */ 0);\n\n#### Flag IMMUTABLE\n\nIf your app targets Android 6 (API level 23) or higher, [specify mutability](/guide/components/intents-filters#DeclareMutabilityPendingIntent). For example, this can be done by using [`FLAG_IMMUTABLE`](/reference/android/app/PendingIntent#FLAG_IMMUTABLE) to prevent unfilled fields from being filled in by a malicious application: \n\n### Kotlin\n\n val pendingIntent =\n PendingIntent.getActivity(\n context,\n /* requestCode = */ 0,\n Intent(intentAction),\n PendingIntent.FLAG_IMMUTABLE)\n\n### Java\n\n PendingIntent pendingIntent =\n PendingIntent.getActivity(\n getContext(),\n /* requestCode= */ 0,\n new Intent(intentAction),\n PendingIntent.FLAG_IMMUTABLE);\n\nOn Android 11 (API level 30) and higher, you have to specify which fields to make mutable, which mitigates accidental vulnerabilities of this type.\n\n### Resources\n\n- [Remediation of PendingIntent vulnerability](https://support.google.com/faqs/answer/9267555)\n\n- [Blog post about the vulnerability](https://valsamaras.medium.com/pending-intents-a-pentesters-view-92f305960f03)\n\n*** ** * ** ***\n\nRisk: Replaying Pending Intents\n-------------------------------\n\nA PendingIntent can be replayed unless the [FLAG_ONE_SHOT](/reference/android/app/PendingIntent#FLAG_ONE_SHOT) flag is set. It is important to use FLAG_ONE_SHOT to avoid replay attacks (performing actions that should not be repeatable).\n\n### Impact\n\nThe impact of this vulnerability varies depending on the implementation of the receiving end of the intent. A malicious app exploiting a PendingIntent that was created without setting the FLAG_ONE_SHOT flag could capture and re-use the intent to repeat actions that should only be able to be done once.\n\n### Mitigations\n\nPending Intents not intended to be fired multiple times should use the [FLAG_ONE_SHOT](/reference/android/app/PendingIntent#FLAG_ONE_SHOT) flag to avoid replay attacks. \n\n### Kotlin\n\n val pendingIntent =\n PendingIntent.getActivity(\n context,\n /* requestCode = */ 0,\n Intent(intentAction),\n PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_ONE_SHOT)\n\n### Java\n\n PendingIntent pendingIntent =\n PendingIntent.getActivity(\n getContext(),\n /* requestCode= */ 0,\n new Intent(intentAction),\n PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT);\n\n### Resources\n\n- [PendingIntent.FLAG_ONE_SHOT](/reference/android/app/PendingIntent#FLAG_ONE_SHOT)\n\n*** ** * ** ***\n\nResources\n---------\n\n- [PendingIntent documentation](/reference/android/app/PendingIntent)\n\n- [PendingIntent and intent filters](/guide/components/intents-filters#PendingIntent)\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [Intent redirection](/topic/security/risks/intent-redirection)"]]