Niebezpieczny interfejs HostnameVerifier

Kategoria OWASP: MASVS-CODE: Code Quality

Omówienie

Implementacja HostnameVerifier odpowiada za weryfikację, czy nazwa hosta w certyfikacie serwera jest zgodna z nazwą hosta serwera, z którym klient próbuje się połączyć.

Niebezpieczna implementacja interfejsu HostnameVerifier w aplikacji na Androida to implementacja, która nieprawidłowo sprawdza nazwę hosta serwera, z którym komunikuje się aplikacja. Może to umożliwić atakującemu podszywanie się pod legalny serwer i wyłukiwanie od aplikacji danych wrażliwych.

Ta luka istnieje, ponieważ klasa HostnameVerifier zawiera wywołania funkcji, które mogą pominąć weryfikację nazwy hosta certyfikatu X.509 i zamiast tego zweryfikować tylko hasz certyfikatu. Powszechnym błędem jest przekonanie, że funkcja SSLSession#isValid wykonuje operację związaną z bezpieczeństwem, podczas gdy jej celem jest tylko sprawdzenie, czy sesja jest prawidłowa i czy można ją wznowić lub do niej dołączyć. Żadna z tych czynności nie sprawdza bezpieczeństwa sesji. Klasa HostnameVerifier została zastąpiona klasą NetworkSecurityConfig.

Wpływ

Niebezpieczne implementacje interfejsu HostnameVerifier mogą prowadzić do luk, które mogą być wykorzystywane do przeprowadzania ataków typu MiTM (man-in-the-middle) na ruch sieciowy aplikacji ofiary. Wykorzystanie tego niebezpiecznego kodu może spowodować, że dane sieciowe aplikacji użytkownika mogą zostać przejęte przez hakerów sieciowych (zdalnie lub lokalnie), jeśli ten kod zostanie uruchomiony. Skutki zależą od treści przypadkowo odsłoniętego ruchu sieciowego (informacje umożliwiające identyfikację, informacje prywatne, poufne wartości sesji, poświadczenia usług itp.).

Środki zaradcze

Użyj pliku NetworkSecurityConfig.xml, aby zapewnić prawidłowe przetwarzanie wszystkich połączeń na etapie produkcji, testowania, debugowania i tworzenia, zamiast używać lub wdrażać niestandardowego kodu weryfikacji certyfikatu TLS/SSL.

Materiały