
EagleEyes Lite Android 애플리케이션의 부적절한 호스트명 검증
EagleEyes Lite (버전 2.0.0)은 HTTPS 통신 중 SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER를 사용하여 호스트명 검증을 비활성화합니다.
그 결과, 애플리케이션은 TLS 인증서의 CN(Common Name) 또는 SAN(Subject Alternative Name) 값에 관계없이 인증서를 수락하므로, 공격자는 유효하거나 자체 서명된 인증서로 합법적인 서버를 가장할 수 있습니다.
동일한 네트워크에 있는 공격자는 이 취약점을 악용하여 MITM 공격을 수행하고, 애플리케이션과 AVTECH 백엔드 서비스 간의 민감한 통신을 가로채거나 변조할 수 있습니다.
디바이스가 Android 8.0 미만 버전에서 실행될 때, 즉 SDK_API_26이 false로 설정되면, 이 메서드는 GetHttpsUrlResponse()를 반환하지 않습니다.
대신 try 블록 내에서 취약한 로직을 실행합니다.
public static String GetHttpsResponse(String str) {
if (SDK_API_26) {
return GetHttpsUrlResponse(str);
}
try {
...
X509HostnameVerifier x509HostnameVerifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier(x509HostnameVerifier);
...
}
...
}
여기서 SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER를 사용하면 적절한 호스트명 검증이 비활성화되어, 서버 인증서의 CN(Common Name) 또는 SAN(Subject Alternative Name)이 요청된 호스트명과 일치하지 않더라도 TLS 연결이 성공합니다.
그 결과, 공격자는 위조된 인증서로 합법적인 서버를 가장하여 MITM 공격을 시작하고 민감한 통신을 가로채거나 변조할 수 있습니다.
Frida 후킹 스크립트 hook.js를 실행하여 SDK_API_26 값을 강제로 false로 설정해 하위 Android 버전을 에뮬레이션했습니다. 이를 통해 GetHttpsResponse() 메서드가 호출되는지 모니터링할 수 있었습니다.
그 결과, 실행 중 GetHttpsResponse()가 성공적으로 호출되었음을 확인했습니다.
매개변수의 민감한 정보에 대한 부적절한 암호화에 대해서는 CVE-2025-50110을 참조하십시오.
애플리케이션은 SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER 사용을 제거하고 모든 HTTPS 연결에 대해 엄격한 호스트명 검증을 적용해야 합니다. 서버의 CN(Common Name) 또는 SAN(Subject Alternative Name) 필드는 요청된 호스트명과 일치하는지 HttpsURLConnection.getDefaultHostnameVerifier() 또는 이와 동등한 엄격한 검증기를 사용하여 검증해야 합니다.
또한, 이전 Android 버전에서 호스트명 검사를 비활성화하는 레거시 대체 로직은 제거되거나 안전한 구현으로 대체되어 일관된 TLS 검증을 보장해야 합니다.