หมวดหมู่ OWASP: MASVS-PLATFORM: การโต้ตอบกับแพลตฟอร์ม
ภาพรวม
ช่องโหว่การลักลอบใช้Intent แบบไม่เจาะจงปลายทางจะเกิดขึ้นเมื่อแอปพลิเคชันไม่ได้ระบุชื่อคลาสคอมโพเนนต์หรือแพ็กเกจที่มีคุณสมบัติครบถ้วนเมื่อเรียกใช้ Intent ซึ่งจะทำให้แอปพลิเคชันที่เป็นอันตรายลงทะเบียนตัวกรอง Intent เพื่อสกัดกั้น Intent แทนที่จะเป็นแอปพลิเคชันที่ต้องการได้
ผู้โจมตีอาจอ่านหรือแก้ไขข้อมูลที่ละเอียดอ่อน หรือโต้ตอบกับออบเจ็กต์ที่เปลี่ยนแปลงได้ เช่น mutable PendingIntents หรือ Binders ทั้งนี้ขึ้นอยู่กับเนื้อหาของ 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-filter ของไฟล์ Manifest
- รายการที่อนุญาตสำหรับสิทธิ์ที่มีสิทธิ์เข้าถึงระดับสูง
- Intent และตัวกรอง Intent
- บังคับให้ใช้ตัวเลือกสำหรับความตั้งใจโดยนัย
- Intent แบบไม่เจาะจงปลายทางที่พบบ่อย