การแก้ไขช่องโหว่ PendingIntent แบบไม่เจาะจงปลายทาง

ข้อมูลนี้มีไว้สำหรับนักพัฒนาแอปที่มีแอปซึ่งมีช่องโหว่ PendingIntent แบบไม่เจาะจงปลายทาง

สิ่งที่จะเกิดขึ้น

แอปของคุณอย่างน้อย 1 แอปมีปัญหา PendingIntent แบบไม่เจาะจงปลายทาง ซึ่งอาจก่อให้เกิดภัยคุกคามความปลอดภัยในรูปของการปฏิเสธการให้บริการ การขโมยข้อมูลส่วนตัว และการโจมตีเพื่อยกระดับสิทธิ์ได้ โปรดอ่านขั้นตอนโดยละเอียดด้านล่างเพื่อแก้ปัญหาที่เกิดขึ้นกับแอป  คุณดูตําแหน่งการใช้งาน PendingIntent แบบไม่เจาะจงปลายทางในแอปได้ที่การแจ้งเตือนของ Play Console สำหรับแอปนั้นๆ หากตําแหน่งใดตำแหน่งหนึ่งลงท้ายด้วย "(ในโค้ดที่โหลดแบบไดนามิก)" แสดงว่าตําแหน่งนั้นอยู่ในโค้ดที่แอปหรือไลบรารีที่แอปใช้โหลดมาแบบไดนามิก ปกติแล้วแอปพลิเคชันมักจะใช้โค้ดที่โหลดแบบไดนามิกผ่านการนําส่งฟีเจอร์แบบออนดีมานด์ แม้ว่าจะมีเทคนิคที่ไม่แนะนําอื่นๆ อยู่ก็ตาม (เทคนิคที่ไม่แนะนําบางเทคนิคถือเป็นการละเมิดนโยบายของ Google Play และไม่ควรนำมาใช้) นอกจากนี้ เครื่องมือสร้างแพ็กเกจยังเปลี่ยนรูปแบบโค้ดของแอปพลิเคชันให้เป็นโค้ดที่โหลดแบบไดนามิกได้ด้วย

ถึงแม้เราจะไม่ได้บังคับ แต่ก็ขอแนะนำให้แก้ไขปัญหานี้ สถานะการเผยแพร่แอปจะไม่ได้รับผลกระทบจากปัญหาที่เกิดขึ้นนี้

รายละเอียดเพิ่มเติม

แอป Android ส่งข้อความระหว่างคอมโพเนนต์โดยใช้ Intent Intent สามารถระบุคอมโพเนนต์เป้าหมาย (Intent แบบเจาะจงปลายทาง) หรือแสดงรายการการดำเนินการทั่วไปและให้ระบบปฏิบัติการนำส่ง Intent ไปยังคอมโพเนนต์ใดๆ ในอุปกรณ์ที่ลงทะเบียนตัวกรอง Intent ตรงกับการดำเนินการดังกล่าว (Intent แบบไม่เจาะจงปลายทาง)

PendingIntent คือ Intent ที่มอบสิทธิ์ให้กับแอปอื่นเพื่อให้นำส่งในอนาคต การสร้าง Intent แบบไม่เจาะจงปลายทางรวมไว้ใต้ PendingIntent เป็นช่องโหว่ด้านความปลอดภัยที่อาจส่งผลให้เกิดการปฏิเสธการให้บริการ การขโมยข้อมูลส่วนตัว และการโจมตีเพื่อยกระดับสิทธิ์ได้ 

ขั้นตอนถัดไป

1. อัปเดตแอปและแก้ไขการแจ้งเตือน "PendingIntent แบบไม่เจาะจงปลายทาง" โดยใช้ขั้นตอนที่ไฮไลต์ไว้ด้านล่าง

ตรวจสอบตำแหน่งที่มีการสร้าง PendingIntent ในแอป ตัวอย่างเช่น โค้ดต่อไปนี้สร้าง PendingIntent ที่รวม Intent แบบไม่เจาะจงปลายทางเอาไว้ 

// Create an implicit base Intent and wrap it in a PendingIntent

Intent base = new Intent("ACTION_FOO");

base.setPackage("some_package");

PendingIntent pi = PendingIntent.getService(this, 0, base, 0);

Google ขอแนะนำให้นักพัฒนาแอปแก้ไขช่องโหว่ดังกล่าวโดยใช้วิธีการต่อไปนี้ (หากใช้ทุกวิธีได้ก็จะยิ่งดี)

  • ตรวจสอบว่ามีการตั้งค่าช่องการดำเนินการ แพ็กเกจ และคอมโพเนนต์ของ Intent พื้นฐาน 
  • ตรวจสอบว่า PendingIntent นำส่งเฉพาะคอมโพเนนต์ที่เชื่อถือได้ 
  • ใช้ FLAG_IMMUTABLE (เพิ่มเข้ามาใน SDK 23) เพื่อสร้าง PendingIntent วิธีนี้ช่วยป้องกันไม่ให้แอปที่ได้รับ PendingIntent ทำการเติมพร็อพเพอร์ตี้ที่ไม่ได้สร้างไว้ ในกรณีที่แอปทำงานบนอุปกรณ์ที่ใช้ SDK 22 หรือเก่ากว่านั้นด้วย เราขอแนะนำให้นักพัฒนาแอปใช้ตัวเลือกก่อนหน้าขณะที่เพิ่มประสิทธิภาพการสร้าง PendingIntent ด้วยรูปแบบต่อไปนี้

if (android.os.Build.VERSION.SDK_INT >= 23) {

  // Create a PendingIntent using FLAG_IMMUTABLE

} else {

  // Existing code that creates a PendingIntent

}

2. ส่ง APK ที่อัปเดตแล้ว

วิธีส่ง App Bundle หรือ APK ที่อัปเดตแล้ว

  1. ไปที่ Play Console
  2. เลือกแอป
  3. ไปที่ App Bundle Explorer
  4. เลือกเวอร์ชันแอปของ APK/App Bundle ที่ไม่เป็นไปตามนโยบายจากเมนูแบบเลื่อนลงที่ด้านขวาบน แล้วจดบันทึกไว้ว่ารายการดังกล่าวอยู่ในรุ่นใด
  5. ไปยังแทร็กที่มีปัญหาด้านนโยบาย ซึ่งจะเป็นหนึ่งใน 4 หน้าต่อไปนี้ ได้แก่ การทดสอบภายใน การทดสอบแบบปิด การทดสอบแบบเปิด หรือเวอร์ชันที่ใช้งานจริง
  6. ที่บริเวณด้านขวาบนของหน้า ให้คลิกสร้างรุ่นใหม่ (คุณอาจต้องคลิก "จัดการแทร็ก" ก่อน)
    • หากรุ่นที่มี APK ที่ละเมิดนโยบายอยู่ในสถานะฉบับร่าง ให้ทิ้งรุ่นดังกล่าว
  7. เพิ่ม App Bundle หรือ APK เวอร์ชันที่เป็นไปตามนโยบาย
    • ตรวจสอบว่า App Bundle หรือ APK เวอร์ชันที่ไม่เป็นไปตามนโยบายอยู่ในส่วนไม่รวมอยู่ด้วยของรุ่นนี้ ดูคำแนะนำเพิ่มเติมได้ที่ส่วน "ไม่รวมอยู่ด้วย (App Bundle และ APK)" ในบทความช่วยเหลือของ Play Console บทความนี้
  8. หากต้องการบันทึกการเปลี่ยนแปลงรุ่น ให้เลือกบันทึก
  9. เมื่อเตรียมรุ่นเรียบร้อยแล้ว ให้เลือกตรวจสอบรุ่น

หากมีการเผยแพร่ APK ที่ไม่เป็นไปตามนโยบายในหลายๆ แทร็ก ให้ทำตามขั้นตอนที่ 5-9 อีกครั้งในแต่ละแทร็ก

ระหว่างนี้แอปใหม่หรืออัปเดตของแอปจะมีสถานะอยู่ระหว่างการตรวจสอบจนกว่าจะมีการตรวจสอบคำขอ คุณจะยังคงเห็นคำเตือนหากยังไม่ได้อัปเดตแอปให้ถูกต้อง

เราพร้อมช่วยเหลือคุณ

หากมีคำถามทางเทคนิคเกี่ยวกับช่องโหว่ คุณโพสต์ถามได้ที่ Stack Overflow โดยใช้แท็ก android-security หากต้องการคำชี้แจงเกี่ยวกับขั้นตอนที่ต้องดำเนินการเพื่อแก้ไขปัญหานี้ โปรดติดต่อทีมสนับสนุนของเรา

ข้อมูลนี้มีประโยชน์ไหม

เราจะปรับปรุงได้อย่างไร
false
เมนูหลัก
12082534821765659288
true
ค้นหาศูนย์ช่วยเหลือ
true
true
true
true
true
5016068
false
false