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¶
- Realizar engenharia reversa do aplicativo ( Descompilação de Código Java).
- 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 retornandotrue. - Ignorar erros: falhar ao lançar exceções adequadas (ex:
CertificateExceptionouIllegalArgumentException) 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 decheckValidity()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(): Retornarnullou 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).