MASTG-TEST-0283: Implementação Incorreta de Verificação de Nome de Host do Servidor
Visão Geral¶
Este teste avalia se um aplicativo Android implementa um HostnameVerifier que utiliza o método verify(...) de forma insegura, efetivamente desativando a validação de nome de host para as conexões afetadas.
Tais implementações inseguras podem permitir que um invasor execute um ataque MITM) com um certificado válido (ou autoassinado) e intercepte ou manipule o tráfego do aplicativo.
Etapas¶
- Realizar engenharia reversa do aplicativo ( Descompilação de Código Java).
- Inspecionar o código-fonte e executar uma ferramenta de análise estática ( Análise Estática no Android) procurando todos os usos de
HostnameVerifier.
Observação¶
A saída contém uma lista de locais onde HostnameVerifier é utilizado.
Avaliação¶
O teste falha se o aplicativo não validar corretamente se o nome de host do servidor corresponde ao certificado.
Isso inclui casos como:
- Sempre aceitar nomes de host: substituir
verify(...)para retornar incondicionalmentetrue, independentemente do nome de host real ou certificado. - Regras de correspondência excessivamente amplas: usar lógica de curinga permissiva que corresponde a domínios não intencionais.
- Cobertura de verificação incompleta: falhar ao invocar a verificação de nome de host em todos os canais SSL/TLS, como os criados via
SSLSocket, ou durante a renegociação. - Verificação manual ausente: não realizar a verificação de nome de host quando ela não é feita automaticamente, como ao usar a API de baixo nível
SSLSocket.
Ao testar usando ferramentas automatizadas, será necessário inspecionar todos os locais reportados no código de engenharia reversa para confirmar a implementação incorreta ( Revisão de Código Java Descompilado).