X509TrustManager ที่ไม่ปลอดภัย

หมวดหมู่ 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 ที่กำหนดเอง

แหล่งข้อมูล