MASWE-0052: 不安全的证书验证
概述¶
未正确验证 TLS 证书的应用程序在安全通信过程中容易受到中间人 (MITM) 攻击和其他安全威胁。当应用程序接受无效、过期、自签名或不受信任的证书而未进行适当验证时,就会出现此漏洞,从而损害传输中数据的完整性和机密性。
影响¶
- 数据拦截:攻击者可以捕获和读取通过网络传输的敏感信息。
- 数据操纵:攻击者可能会更改传输中的数据,导致数据损坏或注入恶意内容。
- 数据泄露:敏感信息可能被泄露。
- 未经授权的访问:攻击者可能通过拦截认证令牌或凭据来获取对用户账户或系统的未经授权访问。
- 服务冒充:用户可能被欺骗,与冒充合法服务的恶意服务器进行交互。
- 数据完整性丢失:应用程序可能接受被更改或损坏的数据,导致不可靠或恶意的结果。
引入方式¶
- 禁用证书验证:开发人员禁用或绕过证书验证检查,以简化开发或排除连接问题。
- 接受自签名证书:应用程序接受自签名或不受信任的证书,而未针对受信任的证书颁发机构 (CA) 进行正确验证。
- 忽略主机名验证:未能验证证书的主机名是否与服务器的主机名匹配,这允许攻击者提供其他域的有效证书。
- 使用不安全的自定义信任管理器:实施不完整、不正确或不安全的自定义证书验证逻辑。
- 不正确的错误处理:即使发生证书验证错误,也继续连接,而未提醒用户或终止连接。
- 信任所有证书:将应用程序配置为默认信任所有证书,而不进行任何验证。
缓解措施¶
- 强制执行严格的证书验证:始终根据操作系统或受信任的第三方提供的受信任证书颁发机构 (CA) 集合验证 TLS 证书。
- 避免接受自签名证书:在生产环境中不应接受自签名或不受信任的证书,除非有安全的机制明确信任它们。
- 启用主机名验证:确保应用程序的网络层根据证书的主题备用名称 (SAN) 或通用名称 (CN) 验证服务器的主机名。
- 使用标准信任管理器:利用成熟的库和平台提供的 API 进行证书验证,而不是自定义实现。
- 正确处理验证错误:当证书验证因过期、吊销或不匹配等问题而失败时,终止连接并提醒用户。
测试¶
MASTG-TEST-0286: 允许信任用户提供CA的网络安全配置 MASTG-TEST-0283: 服务器主机名验证实现不正确 MASTG-TEST-0234: SSLSockets中缺失服务器主机名验证实现 MASTG-TEST-0285: 允许信任用户提供CA的过时Android版本 MASTG-TEST-0282: 不安全的自定义信任评估 MASTG-TEST-0284: WebView中SSL错误处理不正确