Skip to content

MASTG-TEST-0282: Avaliação de Confiança Custom Insegura

Visão Geral

Este teste avalia se um aplicativo Android utiliza checkServerTrusted(...) de forma insegura como parte de um TrustManager personalizado, fazendo com que qualquer conexão configurada para usar esse TrustManager ignore a validação de certificados.

Tais implementações inseguras podem permitir que um invasor execute um ataque MITM) com um certificado válido (ou autoassinado) e intercepte ou adulterar o tráfego do aplicativo.

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) para o aplicativo e procurar por todos os usos de checkServerTrusted(...).

Observação

A saída contém uma lista de locais onde checkServerTrusted(...) é utilizado.

Avaliação

O teste falha se checkServerTrusted(...) for implementado em um X509TrustManager personalizado e não validar adequadamente os certificados do servidor.

Isso inclui casos como:

  • Usar checkServerTrusted(...) que é propenso a erros, quando NSC seria suficiente.
  • Gerenciador de confiança que não faz nada: sobrescrever checkServerTrusted(...) para aceitar todos os certificados sem qualquer validação, por exemplo, retornando imediatamente sem verificar a cadeia de certificados ou sempre retornando true.
  • Ignorar erros: falhar ao lançar exceções adequadas (ex: CertificateException ou IllegalArgumentException) em caso de falha na validação, ou capturá-las e suprimi-las.
  • Usar checkValidity() em vez de validação completa: confiar apenas em verificações de checkValidity() para verificar se o certificado está expirado ou ainda não é válido, mas não verifica confiança ou correspondência de nome de host.
  • Flexibilização explícita da confiança: desativar verificações de confiança para aceitar certificados autoassinados ou não confiáveis por conveniência durante o desenvolvimento ou teste.
  • Uso incorreto de getAcceptedIssuers(): Retornar null ou um array vazio sem o tratamento adequado pode efetivamente desativar a validação do emissor.

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).