안전하지 않은 HostnameVerifier

OWASP 카테고리: MASVS-CODE: 코드 품질

개요

HostnameVerifier 구현에서는 서버 인증서의 호스트 이름이 클라이언트가 연결하려는 서버의 호스트 이름과 일치하는지 확인해야 합니다.

애플리케이션이 통신하는 서버의 호스트 이름을 제대로 확인하지 않는다면 Android 애플리케이션에서 HostnameVerifier가 안전하지 않게 구현된 것입니다. 이렇게 하면 공격자가 합법적인 서버를 가장하여 애플리케이션이 민감한 정보를 전송하도록 유도할 수 있습니다.

HostnameVerifier 클래스에 X.509 인증서 호스트 이름 유효성 검사를 건너뛰고 대신 인증서 해시만 확인하는 함수 호출이 있기 때문에 이러한 취약성이 발생합니다. 많은 사람들이 SSLSession#isValid 함수가 보안 관련 작업을 실행한다고 오해하지만, 실제로 이 함수는 세션이 유효하며 재개하거나 참여할 수 있는지 확인하는 용도로만 사용되며 세션의 보안을 검증하지 않습니다. HostnameVerifier 클래스는 NetworkSecurityConfig로 대체되었습니다.

영향

HostnameVerifier가 안전하지 않게 구현되는 경우 취약점이 발생하여 피해를 받는 애플리케이션의 네트워크 트래픽에 MiTM(중간자) 공격을 실행하는 데 사용될 수 있습니다. 이렇게 안전하지 않은 코드가 트리거되면 원격 또는 로컬에서 네트워크 공격자가 사용자의 애플리케이션 네트워크 데이터를 손상시키는 방식으로 악용될 수 있습니다. 의도치 않게 노출된 네트워크 트래픽의 콘텐츠(PII, 비공개 정보, 민감한 세션 값, 서비스 사용자 인증 정보 등)가 무엇이냐에 따라 발생할 피해가 좌우됩니다.

완화 조치

커스텀 TLS/SSL 인증서 유효성 검사 코드를 사용하거나 구현하는 대신 NetworkSecurityConfig.xml 기능을 사용하여 모든 프로덕션, 테스트, 디버깅, 개발 단계 연결이 올바르게 처리되도록 하는 것이 좋습니다.

리소스