Unsicherer X509TrustManager

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