การลักลอบใช้ Intent แบบไม่เจาะจงปลายทาง
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
หมวดหมู่ OWASP: MASVS-PLATFORM: การโต้ตอบระหว่างแพลตฟอร์ม
ภาพรวม
ช่องโหว่การลักลอบใช้Intent ที่ไม่ชัดแจ้งจะเกิดขึ้นเมื่อแอปพลิเคชันไม่ได้ระบุชื่อคลาสหรือแพ็กเกจคอมโพเนนต์ที่สมบูรณ์เมื่อเรียกใช้ Intent ซึ่งทำให้แอปพลิเคชันที่เป็นอันตรายสามารถลงทะเบียนตัวกรอง Intent เพื่อขัดขวาง Intent แทนแอปพลิเคชันที่ต้องการ
ผู้โจมตีอาจอ่านหรือแก้ไขข้อมูลที่ละเอียดอ่อน หรือโต้ตอบกับออบเจ็กต์ที่เปลี่ยนแปลงได้ เช่น ออบเจ็กต์ที่เปลี่ยนแปลงได้
PendingIntent หรือ Binder ทั้งนี้ขึ้นอยู่กับเนื้อหาของ Intent
การลักลอบใช้ Intent แบบไม่เจาะจงปลายทางอาจทำให้ผู้โจมตีดำเนินการสิ่งต่างๆ ได้ตามต้องการ เช่น การเปิดใช้คอมโพเนนต์ที่ผู้โจมตีควบคุม
ผลกระทบ
หาก Intent ที่ไม่ชัดซึ่งจัดการข้อมูลที่ละเอียดอ่อนส่งโทเค็นเซสชันภายในสตริง URL เพิ่มเติมเพื่อเปิด WebView แอปพลิเคชันใดก็ตามที่ระบุตัวกรอง Intent ที่เหมาะสมจะอ่านโทเค็นนี้ได้ ซึ่งอาจทำให้แอปพลิเคชันที่กําหนดค่าอย่างถูกต้องในอุปกรณ์สามารถดักจับ Intent และอ่านข้อมูลที่ละเอียดอ่อนภายในได้ ซึ่งจะทําให้ผู้โจมตีสามารถลักลอบนำข้อมูล เช่น PII หรือโทเค็นเซสชัน ออกไปได้
การลดปัญหา
ระบุ Intent อย่างชัดเจนโดยเรียกใช้ setPackage()
เว้นแต่แอปพลิเคชันจะกำหนดไว้ ซึ่งช่วยให้คอมโพเนนต์ที่เฉพาะเจาะจง (ในแอปหรือจากแอปพลิเคชันอื่นๆ) เท่านั้นที่ตีความ Intent ได้ ซึ่งจะช่วยป้องกันไม่ให้แอปพลิเคชันที่ไม่น่าเชื่อถือดักรับข้อมูลที่ส่งไปพร้อมกับ Intent ข้อมูลโค้ดต่อไปนี้แสดงวิธีทำให้ Intent ชัดเจน
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);
หากจำเป็นต้องใช้ Intent ที่ไม่ชัดแจ้ง ให้ละเว้นข้อมูลที่ละเอียดอ่อนหรือออบเจ็กต์ที่เปลี่ยนแปลงได้ซึ่งไม่ต้องการเปิดเผย ระบบอาจต้องใช้ 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)"]]