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 de HostnameVerifier
em um aplicativo Android não
verifica corretamente o nome do host do servidor
com que o aplicativo está se comunicando. Isso permite que um invasor
falsifique a identidade de 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 HostnameVerifier
não seguras podem levar a vulnerabilidades que podem
ser usadas para realizar ataques "man-in-the-middle" (MiTM, na sigla em inglês) no tráfego de rede do aplicativo
vítima. O impacto desse exploit de código não seguro é que os dados
da rede do aplicativo de um usuário podem ser comprometidos por invasores na rede (remotamente
ou localmente) se esse código for 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.