HostnameVerifier não seguro

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

Visão geral

A implementação de HostnameVerifier é responsável por verificar se o nome do host no certificado do servidor corresponde ao do servidor a que o cliente está tentando se conectar.

Uma implementação não segura do HostnameVerifier em um app Android não verifica corretamente o nome do host 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.

Essa vulnerabilidade existe porque a classe HostnameVerifier tem chamadas de função que podem pular a validação do nome do host do certificado X.509 e, em vez disso, verificar apenas o hash do certificado. Um equívoco comum é achar que a função SSLSession#isValid executa uma operação relacionada à segurança, quando, na realidade, o objetivo dela é apenas verificar se uma sessão é válida e está disponível para ser retomada ou para participar dela. Isso não valida a segurança de uma sessão. A classe HostnameVerifier foi substituída por NetworkSecurityConfig.

Impacto

Implementações não seguras do HostnameVerifier podem levar a vulnerabilidades que podem ser usadas para realizar ataques "man-in-the-middle" (MiTM) no tráfego de rede do aplicativo vítima. 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 o NetworkSecurityConfig.xml para garantir que todas as conexões de produção, teste, depuração e estágio de desenvolvimento sejam tratadas corretamente, em vez de usar ou implementar um código de validação de certificado TLS/SSL personalizado.

Recursos