หมวดหมู่ 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 แบบไม่เจาะจงปลายทาง เมื่อแอปไม่มีความรู้ที่แน่ชัดว่าแอปใดจะแก้ไขการดำเนินการ (เช่น เขียนอีเมล ถ่ายรูป ฯลฯ)
แหล่งข้อมูล
- องค์ประกอบตัวกรอง Intent ของไฟล์ Manifest
- รายการที่อนุญาตซึ่งเป็นกรรมสิทธิ์
- Intent และตัวกรอง Intent
- การบังคับตัวเลือก Intent แบบไม่เจาะจงปลายทาง
- Intent ที่ไม่เจาะจงปลายทางที่พบบ่อย