Skip to content

MASTG-TEST-0234: Falta de Implementação da Verificação de Nome do Servidor com SSLSockets

Visão Geral

Este teste verifica se um aplicativo Android utiliza SSLSocket sem um HostnameVerifier, permitindo conexões com servidores que apresentam certificados com nomes de host incorretos ou inválidos.

Por padrão, o SSLSocket não executa verificação de nome de host. Para impor essa verificação, o aplicativo deve invocar explicitamente HostnameVerifier.verify() e implementar verificações adequadas.

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.

Nota: A conexão é bem-sucedida mesmo que o aplicativo tenha uma Configuração de Segurança de Rede (NSC) totalmente segura, pois o SSLSocket não é afetado por ela.

Etapas

  1. Realizar engenharia reversa do aplicativo ( Descompilação de Código Java).
  2. Executar uma ferramenta de análise estática ( Análise Estática no Android) e procurar por todos os usos de SSLSocket e HostnameVerifier.

Observação

A saída contém uma lista de locais onde SSLSocket e HostnameVerifier são utilizados.

Avaliação

O caso de teste falha se o aplicativo utilizar SSLSocket sem um HostnameVerifier.

Nota: Se um HostnameVerifier estiver presente, certifique-se de que ele não esteja implementado de forma insegura. Consulte Implementação Incorreta de Verificação de Nome de Host do Servidor para orientações.

Demos

MASTG-DEMO-0048: Conexão SSLSocket com Servidor de Host Incorreto Permitida pela Falta de HostnameVerifier MASTG-DEMO-0049: Conexão SSLSocket com Servidor de Host Incorreto Bloqueada por HostnameVerifier