
Некорректная проверка имени хоста в Android-приложении EagleEyes Lite
EagleEyes Lite (версия 2.0.0) отключает проверку имени хоста при HTTPS-взаимодействии, используя SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER.
В результате приложение принимает TLS-сертификаты независимо от значений их Common Name (CN) или Subject Alternative Name (SAN), что позволяет злоумышленнику выдавать себя за легитимный сервер с помощью любого действительного или самоподписанного сертификата.
Противник, находящийся в той же сети, может воспользоваться этой уязвимостью для проведения 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 отключает надлежащую проверку имени хоста, что означает, что TLS-соединение устанавливается успешно, даже если CN (Common Name) или SAN (Subject Alternative Name) сертификата сервера не совпадают с запрошенным именем хоста.
В результате злоумышленник может выдать себя за легитимный сервер с помощью поддельного сертификата и проводить MITM-атаки для перехвата или изменения конфиденциальной коммуникации.
С помощью Frida-скрипта hook.js значение SDK_API_26 было принудительно установлено в false, чтобы эмулировать более низкую версию Android. Это позволило нам отследить, вызывался ли метод GetHttpsResponse().
В результате мы подтвердили, что GetHttpsResponse() успешно вызывался во время выполнения.
По поводу недостаточного шифрования конфиденциальной информации в параметрах см. CVE-2025-50110.
Приложению следует отказаться от использования SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER и обеспечить строгую проверку имени хоста для всех HTTPS-соединений. Поля Common Name (CN) или Subject Alternative Name (SAN) сервера должны проверяться на соответствие запрошенному имени хоста с помощью HttpsURLConnection.getDefaultHostnameVerifier() или другого строгого проверяющего механизма.
Кроме того, любую устаревшую резервную логику, которая отключает проверку имени хоста для старых версий Android, следует удалить или заменить безопасными реализациями, чтобы гарантировать согласованную проверку TLS.