X509TrustManager não seguro

Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)

Visão geral

A classe X509TrustManager é responsável por verificar a autenticidade de um servidor remoto. Isso é feito validando o certificado do servidor.

Uma implementação insegura de X509TrustManager em um app Android não verifica corretamente a autenticidade do servidor com que o aplicativo está se comunicando. Isso permite que um invasor se passe por um servidor legítimo e induza o aplicativo a enviar dados sensíveis para ele.

A vulnerabilidade existe porque o uso da classe X509TrustManager, Java/Android, permite a substituição completa da verificação do servidor. A classe X509TrustManager tem duas funções de interesse: checkServerTrusted() e getAcceptedIssuers(). Essas chamadas de função podem ser configuradas para confiar em todos os certificados X.509. Por fim, a lógica de validação personalizada pode ter bugs ou estar incompleta, além de permitir conexões inesperadas. Em todos esses casos, a finalidade da classe foi negada e a conexão de rede estabelecida com base na saída X509TrustManager não é segura.

Impacto

Implementações não seguras do X509TrustManager podem levar a vulnerabilidades que podem ser usadas para realizar ataques man-in-the-middle (MitM) no tráfego de rede do aplicativo alvo. O impacto dessa exploração de código não seguro é que os dados da rede do aplicativo de um usuário podem ser comprometidos por invasores na rede (de forma remota ou local) caso esse código seja acionado. O impacto depende do conteúdo do tráfego de rede que está sendo exposto acidentalmente (PII, informações particulares, valores de sessões sensíveis, credenciais de serviço etc.).

Mitigações

Use a funcionalidade NetworkSecurityConfig.xml para garantir que todas as conexões de produção, teste, depuração e estágio de desenvolvimento sejam tratadas adequadamente, em vez de usar ou implementar um código de validação de certificado TLS/SSL personalizado. Se o uso de um certificado autoassinado for necessário para versões de teste e depuração, use NetworkSecurityConfig em vez de implementar um X509TrustManager personalizado.

Recursos