Unsicherer X509TrustManager
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
OWASP-Kategorie:MASVS-CODE: Code Quality
Übersicht
Die Klasse X509TrustManager
ist für die Überprüfung der Authentizität eines Remote-Servers zuständig. Dazu wird das Zertifikat des Servers validiert.
Eine unsichere X509TrustManager
-Implementierung in einer Android-Anwendung ist eine Implementierung, bei der die Authentizität des Servers, mit dem die Anwendung kommuniziert, nicht richtig überprüft wird. So kann ein Angreifer sich als legitimer Server ausgeben und die Anwendung dazu bringen, sensible Daten an ihn zu senden.
Die Sicherheitslücke besteht, weil die Verwendung der Klasse X509TrustManager
in Java/Android die vollständige Überschreibung der Serverüberprüfung ermöglicht. Die Klasse X509TrustManager
hat zwei interessante Funktionen: checkServerTrusted()
und getAcceptedIssuers()
. Diese Funktionsaufrufe können so konfiguriert werden, dass allen X.509-Zertifikaten vertraut wird. Schließlich kann die benutzerdefinierte Validierungslogik fehlerhaft oder unvollständig sein und unerwartete Verbindungen zulassen.
In all diesen Fällen wurde der Zweck der Klasse negiert und die Netzwerkverbindung, die auf der X509TrustManager
-Ausgabe basiert, ist nicht sicher.
Positiv beeinflussen
Unsichere X509TrustManager-Implementierungen können zu Sicherheitslücken führen, die für MitM-Angriffe (Man-in-the-Middle) auf den Netzwerkverkehr der Opferanwendung genutzt werden können. Wenn dieser unsichere Code ausgelöst wird, können die Anwendungsnetzwerkdaten eines Nutzers durch Netzwerkangreifer (remote oder lokal) manipuliert werden. Die Auswirkungen hängen vom Inhalt des Netzwerkverkehrs ab, der versehentlich offengelegt wird (personenidentifizierbare Informationen, private Informationen, sensible Sitzungswerte, Dienstanmeldedaten usw.).
Maßnahmen zur Risikominderung
Verwenden Sie die NetworkSecurityConfig.xml-Funktion, um sicherzustellen, dass alle Verbindungen in der Produktions-, Test-, Debugging- und Entwicklungsphase ordnungsgemäß verarbeitet werden, anstatt benutzerdefinierten TLS-/SSL-Zertifikatvalidierungscode zu verwenden oder zu implementieren. Wenn für Test- und Debug-Builds ein selbst signiertes Zertifikat erforderlich ist, sollten Sie NetworkSecurityConfig verwenden, anstatt eine benutzerdefinierte X509TrustManager
zu implementieren.
Ressourcen
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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"]]