การแก้ไขช่องโหว่ในการลักลอบใช้รูปแบบของ Intent

ข้อมูลนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ของแอปที่มีช่องโหว่ในการลักลอบใช้รูปแบบของ Intent

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

แอปของคุณอย่างน้อย 1 แอปมีปัญหาจากการลักลอบใช้รูปแบบของ Intent ซึ่งอาจทำให้เครือข่ายและเว็บไซต์ที่เป็นอันตรายเข้าถึงคอมโพเนนต์แอปแบบส่วนตัวได้ โปรดดูประกาศใน Play Console เราอาจนำแอปที่มีช่องโหว่ด้านความปลอดภัยที่ไม่มีการแก้ไขออกจาก Google Play หลังพ้นกำหนดเวลาที่แสดงใน Play Console

ต้องดำเนินการ

  1. ลงชื่อเข้าใช้ Play Console และไปที่ส่วนการแจ้งเตือนเพื่อดูแอปที่ได้รับผลกระทบและกำหนดเวลาในการแก้ไขปัญหาเหล่านี้

  2. อัปเดตแอปที่ได้รับผลกระทบโดยทำตามขั้นตอนที่ไฮไลต์ไว้ด้านล่าง

  3. ส่งเวอร์ชันที่อัปเดตของแอปที่ได้รับผลกระทบ

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

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

WebView ที่ไปยังเนื้อหาเว็บที่ไม่น่าเชื่อถือ แยกวิเคราะห์ลิงก์ intent:// โดยใช้ Intent.parseUri และส่ง Intent เหล่านั้นโดยใช้ startActivity อาจเสี่ยงต่อการถูกลักลอบใช้รูปแบบของ Intent WebView เหล่านี้อาจถูกเนื้อหาเว็บที่เป็นอันตรายหลอกให้ส่ง Intent ที่กำหนดเองไปยังคอมโพเนนต์แอปแบบส่วนตัวได้ ซึ่งอาจทำให้แอปเสี่ยงต่ออันตราย เช่น การโจรกรรมข้อมูลแอปส่วนตัวที่คอมโพเนนต์ดังกล่าวจัดการ โปรดทราบว่าเนื้อหาเว็บที่ไม่น่าเชื่อถือรวมถึงเนื้อหาจากโดเมนที่เชื่อถือได้ซึ่งโหลดผ่าน HTTP

เราขอแนะนำให้คุณป้องกันช่องโหว่นี้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้

ตัวเลือกที่ 1: ตรวจสอบว่า WebView ส่ง Intent ที่กำหนดเองไม่ได้

แอปอาจจำกัด Intent ที่สร้างขึ้นด้วย Intent.parseUri เพื่อให้ส่งเป็น Implicit Intent ไปยังคอมโพเนนต์ที่มีตัวกรอง Intent BROWSABLE ได้เท่านั้น โดยใช้โค้ดต่อไปนี้

     // convert Intent scheme URL to Intent object
  Intent intent = Intent.parseUri(url);
  // forbid launching activities without BROWSABLE category
  intent.addCategory("android.intent.category.BROWSABLE");
  // forbid explicit call
  intent.setComponent(null);
  // forbid Intent with selector Intent
  intent.setSelector(null);
  // start the activity by the Intent
  view.getContext().startActivity(intent, -1);

ตัวเลือกที่ 2: ตรวจสอบว่า WebView ที่ได้รับผลกระทบไม่ได้โหลดเนื้อหาเว็บที่ไม่น่าเชื่อถือ

หาก WebView จำเป็นต้องแยกวิเคราะห์ URL รูปแบบ intent:// ที่กำหนดเอง โปรดตรวจสอบว่า WebView ไม่ได้โหลดเนื้อหาเว็บที่ไม่น่าเชื่อถือ ซึ่งรวมถึงเนื้อหาเว็บที่โหลดผ่านการเชื่อมต่อที่ไม่ได้เข้ารหัส นักพัฒนาซอฟต์แวร์จะตั้งค่า android:usesCleartextTraffic เป็น "เท็จ" ในไฟล์ Manifest หรือตั้งค่ากำหนดความปลอดภัยของเครือข่ายให้ไม่อนุญาตการเข้าชมแบบ HTTP ได้ หรือจะตรวจสอบว่า WebView ที่ได้รับผลกระทบไม่โหลด URL ที่มีรูปแบบ HTTP โดยใช้ loadUrl ก็ได้เช่นกัน

เราขอแนะนำให้นักพัฒนาซอฟต์แวร์ตรวจสอบว่า WebView ที่ได้รับผลกระทบไม่โหลด URL ที่ไม่จำกัดซึ่งได้มาจากแหล่งที่มาที่ไม่น่าเชื่อถือ (เช่น URL ที่ได้รับจาก Intent ที่ไม่น่าเชื่อถือ) 

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

ข้อมูลนี้มีประโยชน์ไหม
เราจะปรับปรุงได้อย่างไร