Unsicherer HostnameVerifier

OWASP-Kategorie: MASVS-CODE: Codequalität

Übersicht

Die HostnameVerifier-Implementierung ist dafür verantwortlich, zu prüfen, ob der Hostname im Serverzertifikat mit dem Hostnamen des Servers übereinstimmt, zu dem der Client eine Verbindung herstellen möchte.

Eine unsichere HostnameVerifier-Implementierung in einer Android-Anwendung ist eine Implementierung, bei der der Hostname des Servers, mit dem die Anwendung kommuniziert, nicht ordnungsgemäß überprüft wird. So kann ein Angreifer sich als legitimer Server ausgeben und die Anwendung dazu bringen, sensible Daten an den Angreifer zu senden.

Diese Sicherheitslücke besteht, weil die HostnameVerifier-Klasse Funktionsaufrufe enthält, die die Validierung des X.509-Zertifikats-Hostnamens überspringen und stattdessen nur den Hash des Zertifikats prüfen können. Es ist ein weit verbreiteter Irrtum, dass die Funktion SSLSession#isValid einen sicherheitsbezogenen Vorgang ausführt. In Wirklichkeit dient sie nur dazu, zu prüfen, ob eine Sitzung gültig ist und fortgesetzt oder beigetreten werden kann. Weder die Gültigkeit noch die Sicherheit einer Sitzung werden überprüft. Die Klasse „HostnameVerifier“ wurde durch NetworkSecurityConfig ersetzt.

Positiv beeinflussen

Unsichere HostnameVerifier-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 ausgenutzt wird, können die Anwendungsnetzwerkdaten eines Nutzers von Netzwerkangreifern (remote oder lokal) manipuliert werden. Die Auswirkungen hängen vom Inhalt des versehentlich freigelegten Netzwerkverkehrs ab (personenidentifizierbare Informationen, private Informationen, sensible Sitzungswerte, Anmeldedaten für Dienste usw.).

Abhilfemaßnahmen

Verwenden Sie die Datei NetworkSecurityConfig.xml, um dafür zu sorgen, dass alle Verbindungen in der Produktions-, Test-, Debug- und Entwicklungsphase ordnungsgemäß verarbeitet werden, anstatt benutzerdefinierten TLS/SSL-Zertifikatsvalidierungscode zu verwenden oder zu implementieren.

Ressourcen