Skip to content

MASTG-TEST-0284: Tratamento Incorreto de Erros SSL em WebViews

Visão Geral

Este teste avalia se um aplicativo Android possui WebViews que ignoram erros de certificado SSL/TLS ao sobrescrever o método onReceivedSslError(...) sem validação adequada.

O método onReceivedSslError(...) é acionado quando um WebView encontra um erro de certificado SSL durante o carregamento de uma página. Por padrão, o WebView cancela a solicitação para proteger os usuários contra conexões inseguras. Sobrescrever este método e chamar SslErrorHandler.proceed() sem validação adequada desativa essas proteções.

Isso efetivamente ignora as verificações de certificado SSL no WebView, expondo o aplicativo a ataques MITM) que utilizam certificados inválidos, expirados ou autoassinados.

Etapas

  1. Realizar engenharia reversa do aplicativo ( Descompilação de Código Java).
  2. Inspecionar o código-fonte e executar uma ferramenta de análise estática ( Análise Estática no Android) para buscar todos os usos de onReceivedSslError(...).

Observação

A saída contém uma lista de locais onde onReceivedSslError(...) que inclua um proceed() é usado sem tratamento de exceções que lide adequadamente com erros SSL.

Avaliação

O teste falha se onReceivedSslError(...) for sobrescrito e os erros de certificado forem ignorados sem validação adequada ou envolvimento do usuário.

Isso inclui casos como:

  • Aceitar erros SSL incondicionalmente: chamar proceed() sem verificar a natureza do erro.
  • Confiar apenas no código de erro primário: usar getPrimaryError() para tomada de decisão, como prosseguir se o erro primário não for SSL_UNTRUSTED, o que pode ignorar erros adicionais na cadeia.
  • Suprimir exceções silenciosamente: capturar exceções em onReceivedSslError(...) sem chamar cancel(), o que permite que a conexão continue silenciosamente.

De acordo com a orientação oficial do Android, os aplicativos nunca devem chamar proceed() em resposta a erros SSL. O comportamento correto é cancelar a solicitação para proteger os usuários contra conexões potencialmente inseguras. Prompts para o usuário também são desencorajados, pois os usuários não podem avaliar com confiabilidade problemas SSL.

Ao testar usando ferramentas automatizadas, será necessário inspecionar todos os locais relatados no código de engenharia reversa para confirmar a implementação incorreta ( Revisão de Código Java Descompilado).