الاستيلاء على الإجراء التلقائي
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
فئة OWASP: MASVS-PLATFORM: التفاعل مع المنصة
نظرة عامة
تحدث ثغرة اختراق القصد الضمني عندما لا يحدد التطبيق
اسم فئة مكوّن أو حزمة مؤهَّلة بالكامل عند استدعاء
القصد. ويسمح هذا لتطبيق ضار بتسجيل فلتر أهداف
لاعتراض النية بدلاً من التطبيق المقصود.
استنادًا إلى محتوى الطلب، يمكن للمهاجمين قراءة معلومات حساسة
أو تعديلها أو التفاعل مع عناصر قابلة للتغيير، مثل العناصر
PendingIntents أو Binders القابلة للتغيير.
يمكن أن يؤدي الاستيلاء على نية ضمنية أيضًا إلى السماح للمهاجم بتنفيذ
إجراءات عشوائية، مثل تشغيل مكوّنات يتحكم فيها المهاجم.
التأثير
إذا كان الغرض الضمني الذي يعالج البيانات الحساسة يُرسل رمز تعريف جلسة ضمن سلسلة عنوان URL إضافية لفتح WebView، يمكن لأي تطبيق يحدّد فلاتر الغرض المناسبة قراءة هذا الرمز المميّز. ويمكن أن يسمح ذلك لأي تطبيق تم ضبطه بشكل صحيح
على الجهاز باعتراض الطلب وقراءة البيانات الحسّاسة المضمّنة فيه،
مما يسمح للمهاجمين بسرقة البيانات، مثل معلومات تحديد الهوية الشخصية أو الرموز المميّزة للجلسة.
إجراءات التخفيف
يجب توضيح النوايا من خلال استدعاء
setPackage()
ما لم يتطلّب التطبيق ذلك. ويتيح ذلك تفسير الغرض من مكوِّن معيّن فقط (إما داخل التطبيق أو من تطبيقات أخرى)، ما يمنع التطبيقات غير الموثوق بها من اعتراض البيانات المُرسَلة مع الغرض. يوضّح المقتطف التالي كيفية جعل النية صريحة:
Kotlin
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)
Java
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);
إذا كنت بحاجة إلى استخدام النوايا الضمنية، احذف أي معلومات حسّاسة أو
عناصر قابلة للتغيير لا تريد عرضها. قد يكون من الضروري استخدام النوايا الضمنية عندما
لا يملك أحد التطبيقات معلومات دقيقة عن التطبيق الذي سيحلّ الإجراء
(مثل كتابة رسالة إلكترونية أو التقاط صورة أو غير ذلك).
المراجع
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Implicit intent hijacking\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-PLATFORM: Platform Interaction](https://mas.owasp.org/MASVS/09-MASVS-PLATFORM)\n\nOverview\n--------\n\nThe [implicit intent](/guide/components/intents-filters#Types) hijacking vulnerability occurs when an application does\nnot specify a fully-qualified component class name or package when invoking an\nintent. This allows a malicious application to register an intent filter to\nintercept the intent instead of the intended application.\n\nDepending on the intent content, attackers could read or modify sensitive\ninformation or interact with mutable objects, such as [mutable](/reference/android/app/PendingIntent#FLAG_MUTABLE)\n[PendingIntents](/reference/android/app/PendingIntent) or [Binders](/reference/android/os/Binder).\n\nHijacking an implicit intent can also allow an attacker to perform arbitrary\nactions such as launching attacker-controlled components.\n\nImpact\n------\n\nIf an implicit intent handling sensitive data passes a session token within an\nextra URL string to open a WebView, any application specifying the proper intent\nfilters can read this token. This can allow any properly-configured application\non the device to intercept the intent and read the sensitive data within,\nallowing attackers to exfiltrate data such as PII or session tokens.\n\nMitigations\n-----------\n\nUnless the application requires it, make intents explicit by calling\n`setPackage()`. This allows the intent to be interpreted only by a specific\ncomponent (either in-app or from other applications), preventing untrusted\napplications from intercepting the data sent along with the intent. The\nfollowing snippet shows how to make an intent explicit: \n\n### Kotlin\n\n val intent = Intent(\"android.intent.action.CREATE_DOCUMENT\").apply {\n addCategory(\"android.intent.category.OPENABLE\")\n setPackage(\"com.some.packagename\")\n setType(\"*/*\")\n putExtra(\"android.intent.extra.LOCAL_ONLY\", true)\n putExtra(\"android.intent.extra.TITLE\", \"Some Title\")\n }\n startActivity(intent)\n\n### Java\n\n Intent intent = new Intent(\"android.intent.action.CREATE_DOCUMENT\");\n intent.addCategory(\"android.intent.category.OPENABLE\");\n intent.setPackage(\"com.some.packagename\");\n intent.setType(\"*/*\");\n intent.putExtra(\"android.intent.extra.LOCAL_ONLY\", true);\n intent.putExtra(\"android.intent.extra.TITLE\", \"Some Title\");\n startActivity(intent);\n\nIf you need to use implicit intents, omit any sensitive information or mutable\nobjects that you don't want to expose. Implicit intents may need to be used when\nan app does not have exact knowledge about which app will resolve the action\n(e.g. composing an email, taking a picture, etc.).\n\nResources\n---------\n\n- [Manifest intent-filter element](/guide/topics/manifest/intent-filter-element)\n- [Privileged Permission Allowlisting](https://source.android.com/devices/tech/config/perms-allowlist)\n- [Intents and Intent filters](/guide/components/intents-filters)\n- [Forcing chooser for implicit intents](/guide/components/intents-filters#ForceChooser)\n- [Common implicit intents](/guide/components/intents-common)"]]