X509TrustManager não seguro
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)
Visão geral
A classe X509TrustManager
é responsável por verificar a autenticidade de um
servidor remoto. Isso é feito validando o certificado do servidor.
Uma implementação insegura de X509TrustManager
em um app Android não
verifica corretamente a autenticidade do servidor
com que o aplicativo está se comunicando. Isso permite que um invasor
se passe por um servidor legítimo e induza o aplicativo a enviar dados
sensíveis para ele.
A vulnerabilidade existe porque o uso da classe X509TrustManager
,
Java/Android, permite a substituição completa da verificação do servidor. A
classe X509TrustManager
tem duas funções de interesse:
checkServerTrusted()
e getAcceptedIssuers()
. Essas chamadas de
função podem ser configuradas para confiar em todos os certificados X.509. Por fim, a lógica de validação personalizada pode ter bugs ou estar incompleta, além de permitir conexões inesperadas.
Em todos esses casos, a finalidade da classe foi negada e a conexão de rede
estabelecida com base na saída X509TrustManager
não é segura.
Impacto
Implementações não seguras do X509TrustManager podem levar a vulnerabilidades que podem ser
usadas para realizar ataques man-in-the-middle (MitM) no tráfego de rede do
aplicativo alvo. O impacto dessa exploração de código não seguro é que os dados
da rede do aplicativo de um usuário podem ser comprometidos por invasores na rede (de forma remota
ou local) caso esse código seja acionado. O impacto depende do conteúdo do tráfego
de rede que está sendo exposto acidentalmente (PII, informações particulares,
valores de sessões sensíveis, credenciais de serviço etc.).
Mitigações
Use a funcionalidade NetworkSecurityConfig.xml para garantir que todas as conexões de produção, teste, depuração e estágio de desenvolvimento sejam tratadas adequadamente, em vez de usar ou implementar um código de validação de certificado TLS/SSL personalizado. Se o uso de um certificado autoassinado for necessário para versões de teste e depuração, use NetworkSecurityConfig em vez de implementar um X509TrustManager
personalizado.
Recursos
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-27 UTC."],[],[],null,["# Unsafe X509TrustManager\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nThe `X509TrustManager` class is responsible for verifying the authenticity of a\nremote server. It does this by validating the server's certificate.\n\nAn insecure `X509TrustManager` implementation in an Android application is an\nimplementation that does not properly verify the authenticity of the server with\nwhich the application is communicating. This can allow an attacker to\nimpersonate a legitimate server and trick the application into sending sensitive\ndata to the attacker.\n\nThe vulnerability exists because using the [`X509TrustManager`](/reference/javax/net/ssl/X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate%5B%5D,%20java.lang.String)) class,\nJava/Android allows the complete overriding of server verification. The\n`X509TrustManager` class has two functions of interest:\n[`checkServerTrusted()`](/reference/javax/net/ssl/X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate%5B%5D,%20java.lang.String)) and [`getAcceptedIssuers()`](/reference/javax/net/ssl/X509TrustManager#getAcceptedIssuers()). These function\ncalls can be configured to trust all X.509 certificates. Finally, custom\nvalidation logic may be buggy or incomplete and permit unexpected connections.\nIn all these cases, the purpose of the class has been negated and the network\nconnection established based on the `X509TrustManager` output is not secure.\n\nImpact\n------\n\nUnsafe X509TrustManager implementations can lead to vulnerabilities which can be\nused to perform MitM (Man-in-the-Middle) attacks on network traffic from the\nvictim application. The impact of exploiting this insecure code is that a user's\napplication network data can be compromised by network attackers (remotely or\nlocally) if this code is triggered. The impact is dependent on the content of\nthe network traffic being inadvertently exposed (PII, private information,\nsensitive session values, service credentials, etc).\n\nMitigations\n-----------\n\nUse the [NetworkSecurityConfig.xml](/training/articles/security-config) functionality to ensure that all\nproduction, testing, debugging, and dev stage connections are properly handled\nrather than using or implementing custom TLS/SSL certificate validation code. If\nusing a self-signed certificate is needed for test and debug builds, consider\nusing NetworkSecurityConfig instead of implementing a custom `X509TrustManager`.\n\nResources\n---------\n\n- [Play Warning docs](https://support.google.com/faqs/answer/6346016)\n- [Documentation to assist configuring the Network security configuration xml file.](/training/articles/security-config)\n- [Developer documentation for the TrustManager class.](/reference/javax/net/ssl/TrustManager)\n- [This check looks for X.509TrustManager implementations whose checkServerTrusted or checkClientTrusted methods do nothing (thus trusting any certificate chain).](https://googlesamples.github.io/android-custom-lint-rules/checks/TrustAllX509TrustManager.md.html)\n- [This check looks for custom X.509TrustManager implementations.](https://googlesamples.github.io/android-custom-lint-rules/checks/CustomX509TrustManager.md.html)\n- \u003chttps://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/X509TrustManagerDetector.java\u003e"]]