EagleEyes Lite(版本 2.0.0)通过使用 SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER 禁用了 HTTPS 通信期间的主机名验证。
因此,应用程序会接受任何 TLS 证书,无论其通用名称(CN)或主题备用名称(SAN)值如何,这使得攻击者能够使用任何有效或自签名证书来冒充合法服务器。
处于同一网络中的攻击者可以利用此漏洞执行中间人攻击,从而拦截或篡改应用程序与 AVTECH 后端服务之间的敏感通信。
当设备运行在低于 8.0 的 Android 版本时(即 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(通用名称)或 SAN(主题备用名称)与请求的主机名不匹配,TLS 连接也会成功。
因此,攻击者可以使用伪造证书冒充合法服务器并发起中间人攻击,以拦截或修改敏感通信。
通过运行 Frida 挂钩脚本 hook.js,SDK_API_26 的值被强制设置为 false,以模拟较低的 Android 版本。这使我们能够监控 GetHttpsResponse() 方法是否被调用。
结果,我们确认在运行过程中成功调用了 GetHttpsResponse()。
关于参数中敏感信息加密不足的问题,请参考 CVE-2025-50110。
应用程序应移除对 SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER 的使用,并对所有 HTTPS 连接强制执行严格的主机名验证。必须使用 HttpsURLConnection.getDefaultHostnameVerifier() 或等效的严格验证器,将服务器的通用名称(CN)或主题备用名称(SAN)字段与请求的主机名进行比对。
此外,应移除任何针对旧版 Android 禁用主机名检查的遗留回退逻辑,或将其替换为安全实现,以确保一致的 TLS 验证。