การใช้ Deep Link ที่ไม่ปลอดภัย

หมวดหมู่ OWASP: MASVS-PLATFORM: การโต้ตอบระหว่างแพลตฟอร์ม

ภาพรวม

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

ผลกระทบ

การไม่มีกลไกการตรวจสอบ Deep Link ที่ถูกต้องหรือการใช้ Deep Link ที่ไม่ปลอดภัยอาจช่วยให้ผู้ใช้ที่เป็นอันตรายทำการโจมตีได้ เช่น การหลบเลี่ยงการตรวจสอบโฮสต์ การใช้สคริปต์ข้ามแอป และการดำเนินการกับโค้ดจากระยะไกลภายในบริบทสิทธิ์ของแอปพลิเคชันที่เปราะบาง ซึ่งอาจส่งผลให้มีการเข้าถึงข้อมูลที่ละเอียดอ่อนหรือฟังก์ชันโดยไม่ได้รับอนุญาต ทั้งนี้ขึ้นอยู่กับลักษณะของแอปพลิเคชัน

Android ออกแบบมาให้แอปหลายแอปลงทะเบียนตัวกรอง Intent สําหรับ URI ของ Deep Link เดียวกันได้ หากต้องการป้องกันไม่ให้แอปที่เป็นอันตรายขัดขวาง Deep Link ที่มีไว้สำหรับแอปของคุณ ให้ใช้แอตทริบิวต์ android:autoVerify ใน intent-filter ภายใน AndroidManifest ของแอปพลิเคชัน ซึ่งจะช่วยให้ผู้ใช้เลือกแอปที่ต้องการจัดการ Deep Link ได้ เพื่อให้การดำเนินการเป็นไปตามที่ต้องการและป้องกันไม่ให้แอปพลิเคชันที่เป็นอันตรายตีความ Deep Link โดยอัตโนมัติ

Android 12 เปิดตัวการจัดการ Intent บนเว็บที่เข้มงวดขึ้นเพื่อเพิ่มความปลอดภัย ตอนนี้แอปต้องได้รับการยืนยันเพื่อจัดการลิงก์จากโดเมนที่เฉพาะเจาะจงผ่าน App Link ของ Android หรือการเลือกของผู้ใช้ในการตั้งค่าระบบ ซึ่งจะช่วยป้องกันไม่ให้แอปลักลอบใช้ลิงก์ที่ไม่ควรจัดการ

หากต้องการเปิดใช้การยืนยันการจัดการลิงก์สําหรับแอป ให้เพิ่มตัวกรอง Intent ที่ตรงกับรูปแบบต่อไปนี้ (ตัวอย่างนี้นำมาจากเอกสารประกอบยืนยัน Android App Link)

  <!-- Make sure you explicitly set android:autoVerify to "true". -->
  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
  
      <!-- If a user clicks on a shared link that uses the "http" scheme, your
           app should be able to delegate that traffic to "https". -->
      <data android:scheme="http" />
      <data android:scheme="https" />
  
      <!-- Include one or more domains that should be verified. -->
      <data android:host="..." />
  </intent-filter>

Deep Link สามารถมีพารามิเตอร์เพิ่มเติมที่แสดงต่อ Intent เป้าหมาย เช่น เพื่อดําเนินการเพิ่มเติม พื้นฐานของการจัดการ Deep Link ที่ปลอดภัย คือการตรวจสอบข้อมูลที่เข้มงวด ข้อมูลขาเข้าทั้งหมดจาก Deep Link ควรได้รับการตรวจสอบและล้างออกอย่างพิถีพิถันโดยนักพัฒนาซอฟต์แวร์เพื่อป้องกันไม่ให้มีการแทรกโค้ดหรือค่าที่เป็นอันตรายภายในแอปพลิเคชันที่ถูกต้อง ซึ่งทำได้โดยการตรวจสอบค่าของพารามิเตอร์ Deep Link กับรายการที่อนุญาตของค่าที่คาดไว้ซึ่งกําหนดไว้ล่วงหน้า

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

แหล่งข้อมูล