Niebezpieczny X509TrustManager

Kategoria OWASP: MASVS-CODE: jakość kodu

Omówienie

Klasa X509TrustManager odpowiada za weryfikację autentyczności serwera zdalnego. Odbywa się to przez sprawdzenie certyfikatu serwera.

Niezabezpieczona implementacja X509TrustManager w aplikacji na Androida to implementacja, która nie weryfikuje prawidłowo autentyczności serwera, z którym komunikuje się aplikacja. Może to umożliwić osobie przeprowadzającej atak podszywanie się pod legalny serwer i nakłonienie aplikacji do wysłania do niej danych wrażliwych.

Luka w zabezpieczeniach występuje, ponieważ użycie klasy X509TrustManager w Java/Android umożliwia całkowite zastąpienie weryfikacji serwera. Klasa X509TrustManager ma 2 interesujące funkcje: checkServerTrusted()getAcceptedIssuers(). Te wywołania funkcji można skonfigurować tak, aby ufały wszystkim certyfikatom X.509. Na koniec trzeba dodać, że niestandardowa logika weryfikacji może zawierać błędy lub być niekompletna i umożliwiać nieoczekiwane połączenia. We wszystkich tych przypadkach cel klasy został zanegowany, a połączenie sieciowe nawiązane na podstawie danych wyjściowych X509TrustManager nie jest bezpieczne.

Wpływ

Potencjalnie niebezpieczne implementacje interfejsu X509TrustManager mogą prowadzić do luk w zabezpieczeniach, które można wykorzystać do przeprowadzania ataków typu „man-in-the-middle” (MITM) na ruch sieciowy z aplikacji ofiary. Jeśli ten niebezpieczny kod zostanie uruchomiony, dane sieciowe aplikacji użytkownika mogą zostać naruszone przez atakujących w sieci (zdalnie lub lokalnie). Wpływ zależy od treści nieumyślnie ujawnionego ruchu sieciowego (informacje umożliwiające identyfikację osoby, informacje prywatne, wartości sesji o charakterze kontrowersyjnym, dane logowania do usług itp.).

Środki ograniczające ryzyko

Używaj funkcji NetworkSecurityConfig.xml, aby mieć pewność, że wszystkie połączenia na etapach produkcji, testowania, debugowania i programowania są prawidłowo obsługiwane, zamiast używać lub wdrażać niestandardowy kod weryfikacji certyfikatów TLS/SSL. Jeśli w przypadku kompilacji testowych i debugowania konieczne jest użycie certyfikatu podpisanego samodzielnie, rozważ użycie NetworkSecurityConfig zamiast implementowania niestandardowego X509TrustManager.

Materiały