OWASP 类别: MASVS-CODE: 代码质量
概览
HostnameVerifier
实现负责验证服务器证书中的主机名是否与客户端尝试连接的服务器主机名匹配。
Android 应用中不安全的 HostnameVerifier 实现是指未能正确验证应用正在与其通信的服务器的主机名的实现。这可能允许攻击者冒充合法服务器,诱骗应用将敏感数据发送给攻击者。
存在此漏洞是因为 HostnameVerifier
类中包含一些函数调用,这些调用可以跳过 X.509 证书主机名验证,而仅验证证书哈希。一个常见的误解是 SSLSession#isValid
函数会执行与安全相关的操作,而实际上它的目的只是检查会话是否有效以及是否可用于恢复或加入;这两者都不会验证会话的*安全性*。HostnameVerifier 类已被 NetworkSecurityConfig 取代。
影响
不安全的 HostnameVerifier 实现可能导致漏洞,这些漏洞可被用于对受害应用的网络流量执行中间人 (MiTM) 攻击。利用此不安全代码的影响是,如果触发此代码,用户的应用网络数据可能会被网络攻击者(远程或本地)窃取。影响取决于无意中暴露的网络流量内容(个人身份信息、私人信息、敏感会话值、服务凭据等)。
缓解措施
使用 NetworkSecurityConfig.xml 确保所有生产、测试、调试和开发阶段的连接都得到妥善处理,而不是使用或实现自定义的 TLS/SSL 证书验证代码。
资源
- 网络安全配置文档
- 此检查寻找 HostnameVerifier 的实现,其 verify 方法总是返回 true(因此信任任何主机名)
- HostnameVerifier 类的开发者文档
- Android 中的 AllowAllHostnameVerifierDetector 类