หมวดหมู่ OWASP: MASVS-CODE: คุณภาพโค้ด
ภาพรวม
การติดตั้งใช้งาน HostnameVerifier
มีหน้าที่รับผิดชอบในการตรวจสอบว่าชื่อโฮสต์ในใบรับรองของเซิร์ฟเวอร์ตรงกับชื่อโฮสต์ของเซิร์ฟเวอร์ที่ไคลเอ็นต์พยายามเชื่อมต่อ
การใช้งาน HostnameVerifier ที่ไม่ปลอดภัยในแอปพลิเคชัน Android คือการใช้งานที่ไม่ยืนยันชื่อโฮสต์ของเซิร์ฟเวอร์ที่แอปพลิเคชันสื่อสารด้วยอย่างถูกต้อง ซึ่งอาจทำให้ผู้โจมตีแอบอ้างเป็นเซิร์ฟเวอร์ที่ถูกต้องตามกฎหมายและหลอกแอปพลิเคชันให้ส่งข้อมูลที่ละเอียดอ่อนไปยังผู้โจมตีได้
ช่องโหว่นี้เกิดขึ้นเนื่องจากคลาส HostnameVerifier
มีการเรียกใช้ฟังก์ชันที่ข้ามการตรวจสอบชื่อโฮสต์ของใบรับรอง X.509 และยืนยันเฉพาะแฮชของใบรับรองเท่านั้น คําเข้าใจผิดที่พบบ่อยคือฟังก์ชัน SSLSession#isValid
ดําเนินการที่เกี่ยวข้องกับความปลอดภัย แต่ในความเป็นจริงแล้ว ฟังก์ชันนี้มีไว้เพื่อตรวจสอบว่าเซสชันถูกต้องและพร้อมใช้งานสําหรับการกลับมาทํางานต่อหรือเข้าร่วมหรือไม่ ซึ่งทั้ง 2 อย่างนี้ไม่ได้ตรวจสอบความปลอดภัยของเซสชัน คลาส HostnameVerifier เลิกใช้งานแล้ว NetworkSecurityConfig เข้ามาแทนที่
ผลกระทบ
การใช้งาน HostnameVerifier ที่ไม่ปลอดภัยอาจทำให้เกิดช่องโหว่ซึ่งอาจนำไปใช้ในการโจมตี MiTM (Man-In-The-Middle) กับการจราจรของข้อมูลในเครือข่ายจากแอปพลิเคชันที่เป็นเหยื่อ ผลกระทบของการใช้ประโยชน์จากโค้ดที่ไม่ปลอดภัยนี้คือ ข้อมูลเครือข่ายแอปพลิเคชันของผู้ใช้อาจถูกบุกรุกโดยผู้โจมตีเครือข่าย (จากระยะไกลหรือจากเครื่อง) หากมีการเรียกใช้โค้ดนี้ ผลกระทบจะขึ้นอยู่กับเนื้อหาของการรับส่งข้อมูลในเครือข่ายที่เปิดเผยโดยไม่ตั้งใจ (PII, ข้อมูลส่วนตัว, ค่าเซสชันที่ละเอียดอ่อน, ข้อมูลเข้าสู่ระบบของบริการ ฯลฯ)
การลดปัญหา
ใช้ NetworkSecurityConfig.xml เพื่อให้แน่ใจว่าระบบจัดการการเชื่อมต่อทั้งหมดในขั้นตอนการทํางาน การทดสอบ การแก้ไขข้อบกพร่อง และระยะการพัฒนาอย่างเหมาะสม แทนที่จะใช้หรือติดตั้งใช้งานโค้ดการตรวจสอบใบรับรอง TLS/SSL ที่กำหนดเอง
แหล่งข้อมูล
- เอกสารประกอบเกี่ยวกับการกำหนดค่าความปลอดภัยของเครือข่าย
- การตรวจสอบนี้จะมองหาการใช้งาน HostnameVerifier ที่ใช้เมธอด verify ซึ่งจะแสดงผลเป็น "จริง" เสมอ (จึงเชื่อถือชื่อโฮสต์ใดก็ได้)
- เอกสารประกอบสําหรับนักพัฒนาซอฟต์แวร์เกี่ยวกับคลาส HostnameVerifier
- คลาส AllowAllHostnameVerifierDetector ใน Android