OWASP 카테고리: MASVS-CODE: 코드 품질
개요
HostnameVerifier
구현에서는 서버 인증서의 호스트 이름이 클라이언트가 연결하려는 서버의 호스트 이름과 일치하는지 확인해야 합니다.
애플리케이션이 통신하는 서버의 호스트 이름을 제대로 확인하지 않는다면 Android 애플리케이션에서 HostnameVerifier
가 안전하지 않게 구현된 것입니다. 이렇게 하면 공격자가 합법적인 서버를 가장하여 애플리케이션이 민감한 정보를 전송하도록 유도할 수 있습니다.
HostnameVerifier
클래스에 X.509 인증서 호스트 이름 유효성 검사를 건너뛰고 대신 인증서 해시만 확인하는 함수 호출이 있기 때문에 이러한 취약성이 발생합니다. 많은 사람들이 SSLSession#isValid
함수가 보안 관련 작업을 실행한다고 오해하지만, 실제로 이 함수는 세션이 유효하며 재개하거나 참여할 수 있는지 확인하는 용도로만 사용되며 세션의 보안을 검증하지 않습니다. HostnameVerifier
클래스는 NetworkSecurityConfig로 대체되었습니다.
영향
HostnameVerifier
가 안전하지 않게 구현되는 경우 취약점이 발생하여 피해를 받는 애플리케이션의 네트워크 트래픽에 MiTM(중간자) 공격을 실행하는 데 사용될 수 있습니다. 이렇게 안전하지 않은 코드가 트리거되면 원격 또는 로컬에서 네트워크 공격자가 사용자의 애플리케이션 네트워크 데이터를 손상시키는 방식으로 악용될 수 있습니다. 의도치 않게 노출된 네트워크 트래픽의 콘텐츠(PII, 비공개 정보, 민감한 세션 값, 서비스 사용자 인증 정보 등)가 무엇이냐에 따라 발생할 피해가 좌우됩니다.
완화 조치
커스텀 TLS/SSL 인증서 유효성 검사 코드를 사용하거나 구현하는 대신 NetworkSecurityConfig.xml 기능을 사용하여 모든 프로덕션, 테스트, 디버깅, 개발 단계 연결이 올바르게 처리되도록 하는 것이 좋습니다.