หมวดหมู่ OWASP: MASVS-CODE: คุณภาพของโค้ด
ภาพรวม
คลาส X509TrustManager
มีหน้าที่รับผิดชอบในการยืนยันความถูกต้องของเซิร์ฟเวอร์ระยะไกล
โดยจะตรวจสอบใบรับรองของเซิร์ฟเวอร์
การติดตั้งใช้งาน X509TrustManager
ที่ไม่ปลอดภัยในแอปพลิเคชัน Android คือการติดตั้งใช้งานที่ไม่ได้ยืนยันความถูกต้องของเซิร์ฟเวอร์ที่แอปพลิเคชันกำลังสื่อสารด้วยอย่างถูกต้อง ซึ่งอาจทำให้ผู้โจมตี
แอบอ้างเป็นเซิร์ฟเวอร์ที่ถูกต้องและหลอกให้แอปพลิเคชันส่งข้อมูลที่ละเอียดอ่อน
ไปยังผู้โจมตีได้
ช่องโหว่นี้มีอยู่เนื่องจากเมื่อใช้คลาส X509TrustManager
Java/Android จะอนุญาตให้มีการลบล้างการยืนยันเซิร์ฟเวอร์ทั้งหมด คลาส
X509TrustManager
มีฟังก์ชันที่น่าสนใจ 2 ฟังก์ชัน ได้แก่
checkServerTrusted()
และ getAcceptedIssuers()
คุณกำหนดค่าฟังก์ชัน
การเรียกเหล่านี้ให้เชื่อถือใบรับรอง X.509 ทั้งหมดได้ สุดท้ายนี้ ตรรกะการตรวจสอบที่กำหนดเองอาจมีข้อบกพร่องหรือไม่สมบูรณ์ และอนุญาตการเชื่อมต่อที่ไม่คาดคิด
ในทุกกรณีเหล่านี้ วัตถุประสงค์ของคลาสจะถูกปฏิเสธและเครือข่าย
การเชื่อมต่อที่สร้างขึ้นตามเอาต์พุต X509TrustManager
จะไม่ปลอดภัย
ผลกระทบ
การใช้งาน X509TrustManager ที่ไม่ปลอดภัยอาจทำให้เกิดช่องโหว่ที่ใช้ในการโจมตีแบบแทรกกลางการสื่อสาร (Man-in-the-Middle หรือ MitM) ในการจราจรของข้อมูลในเครือข่ายจากแอปพลิเคชันของเหยื่อได้ ผลกระทบจากการใช้ประโยชน์จากโค้ดที่ไม่ปลอดภัยนี้คือผู้โจมตีในเครือข่าย (จากระยะไกลหรือในเครื่อง) สามารถบุกรุกข้อมูลเครือข่ายของแอปพลิเคชันของผู้ใช้ได้หากโค้ดนี้เริ่มทำงาน ผลกระทบขึ้นอยู่กับเนื้อหาของ การรับส่งข้อมูลเครือข่ายที่เปิดเผยโดยไม่ตั้งใจ (PII, ข้อมูลส่วนตัว, ค่าเซสชันที่ละเอียดอ่อน ข้อมูลเข้าสู่ระบบของบริการ ฯลฯ)
การลดปัญหา
ใช้ฟังก์ชัน NetworkSecurityConfig.xml เพื่อให้มั่นใจว่าการเชื่อมต่อทั้งหมดใน
การผลิต การทดสอบ การแก้ไขข้อบกพร่อง และขั้นตอนการพัฒนาได้รับการจัดการอย่างเหมาะสม
แทนที่จะใช้หรือติดตั้งใช้งานโค้ดการตรวจสอบใบรับรอง TLS/SSL ที่กำหนดเอง หากจำเป็นต้องใช้ใบรับรองที่ลงนามด้วยตนเองสำหรับการทดสอบและบิลด์การแก้ไขข้อบกพร่อง ให้พิจารณาใช้ NetworkSecurityConfig แทนการใช้ X509TrustManager
ที่กำหนดเอง
แหล่งข้อมูล
- เอกสารคำเตือนของ Play
- เอกสารประกอบเพื่อช่วยในการกำหนดค่าไฟล์ XML ของการกำหนดค่าการรักษาความปลอดภัยเครือข่าย
- เอกสารประกอบสำหรับนักพัฒนาแอปเกี่ยวกับคลาส TrustManager
- การตรวจสอบนี้จะค้นหาการใช้งาน X.509TrustManager ที่เมธอด checkServerTrusted หรือ checkClientTrusted ไม่ได้ดำเนินการใดๆ (จึงเชื่อถือเชนใบรับรองทั้งหมด)
- การตรวจสอบนี้จะมองหาการใช้งาน X.509TrustManager ที่กำหนดเอง
- https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/X509TrustManagerDetector.java