פריצה מרומזת של כוונה
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
קטגוריית OWASP: MASVS-PLATFORM: אינטראקציה בפלטפורמה
סקירה כללית
נקודת החולשה של החטיפה של כוונה משתמעת מתרחשת כשאפליקציה לא מציינת שם או חבילת רכיבים מוגדרים במלואם כשמפעילים כוונה. כך אפליקציה זדונית יכולה לרשום מסנן אינטנט כדי ליירט את ה-Intent במקום האפליקציה המיועדת.
בהתאם לתוכן של ה-Intent, תוקפים יכולים לקרוא או לשנות מידע רגיש או לקיים אינטראקציה עם אובייקטים שניתן לשינוי, כמו 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 (שעון 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-26 (שעון UTC)."],[],[],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)"]]