X509TrustManager non sicuro
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Categoria OWASP: MASVS-CODE: Code Quality
Panoramica
La classe X509TrustManager
è responsabile della verifica dell'autenticità di un
server remoto. A questo scopo, convalida il certificato del server.
Un'implementazione X509TrustManager
non sicura in un'applicazione Android è un'implementazione che non verifica correttamente l'autenticità del server con cui l'applicazione sta comunicando. In questo modo, un malintenzionato può
fingersi un server legittimo e indurre l'applicazione a inviare dati sensibili
all'aggressore.
La vulnerabilità esiste perché, utilizzando la classe X509TrustManager
,
Java/Android consente l'override completo della verifica del server. La classe
X509TrustManager
ha due funzioni di interesse:
checkServerTrusted()
e getAcceptedIssuers()
. Queste chiamate
di funzione possono essere configurate in modo da considerare attendibili tutti i certificati X.509. Infine, la logica di convalida personalizzata potrebbe essere difettosa o incompleta e consentire connessioni impreviste.
In tutti questi casi, lo scopo della classe è stato negato e la connessione di rete stabilita in base all'output X509TrustManager
non è sicura.
Impatto
Implementazioni non sicure di X509TrustManager possono portare a vulnerabilità che possono essere
utilizzate per eseguire attacchi MITM (Man-in-the-Middle) sul traffico di rete dell'applicazione
vittima. L'impatto dello sfruttamento di questo codice non sicuro è che i dati di rete dell'applicazione di un utente possono essere compromessi da aggressori di rete (da remoto o localmente) se questo codice viene attivato. L'impatto dipende dal contenuto
del traffico di rete esposto inavvertitamente (PII, informazioni private,
valori di sessione sensibili, credenziali di servizio e così via).
Mitigazioni
Utilizza la funzionalità NetworkSecurityConfig.xml per assicurarti che tutte le connessioni di produzione, test, debug e sviluppo vengano gestite correttamente anziché utilizzare o implementare codice di convalida dei certificati TLS/SSL personalizzato. Se
è necessario utilizzare un certificato autofirmato per le build di test e debug, valuta la possibilità di
utilizzare NetworkSecurityConfig anziché implementare un X509TrustManager
personalizzato.
Risorse
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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"]]