OWASP 类别: MASVS-CODE: 代码质量
概述
该 X509TrustManager
类负责验证远程服务器的真实性。它通过验证服务器的证书来实现这一点。
Android 应用中不安全的 X509TrustManager
实现是指未正确验证与应用通信的服务器真实性的实现。这可能允许攻击者伪装成合法服务器,并欺骗应用将敏感数据发送给攻击者。
漏洞的存在原因是,使用 X509TrustManager
类,Java/Android 允许完全覆盖服务器验证。该 X509TrustManager
类有两个值得关注的函数:checkServerTrusted()
和 getAcceptedIssuers()
。可以将这些函数调用配置为信任所有 X.509 证书。最后,自定义验证逻辑可能存在错误或不完整,并允许意外连接。在所有这些情况下,类的目的都被否定,并根据 X509TrustManager
输出建立的网络连接并不安全。
影响
不安全的 X509TrustManager 实现会导致漏洞,这些漏洞可用于对受害者应用的网络流量执行中间人(MitM)攻击。利用此不安全代码的影响是,如果触发此代码,用户的应用网络数据可能会被网络攻击者(远程或本地)窃取。影响取决于被意外泄露的网络流量内容(PII、私人信息、敏感会话值、服务凭据等)。
缓解措施
使用 NetworkSecurityConfig.xml 功能确保所有生产、测试、调试和开发阶段连接都得到正确处理,而不是使用或实现自定义 TLS/SSL 证书验证代码。如果需要使用自签名证书进行测试和调试构建,请考虑使用 NetworkSecurityConfig 而不是实现自定义 X509TrustManager
。
资源
- Play 警告文档
- 帮助配置网络安全配置 xml 文件的文档。
- TrustManager 类的开发者文档。
- 此检查查找其 checkServerTrusted 或 checkClientTrusted 方法不执行任何操作(因此信任任何证书链)的 X.509TrustManager 实现。
- 此检查查找自定义 X.509TrustManager 实现。
- https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/X509TrustManagerDetector.java